'Value' must be double scalar within the range of 'Limits'
7 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi. I am creating a gui on appdesigner. I am reading numeric data from a csv file and storing this data in an array. I want to calculate the standard deviation of the values store in the array and display it on the numeric edit field. The error I get is 'Value' must be a double scalar within the range of 'Limits'. But my Limit of the editfield is -Inf,Inf. The csv file is attached and the code is provided below. Please assist.
data=readtable('tests1.csv','NumHeaderLines',9);
col_vec=data{:,2}
app.stdEditField.Value=std(col_vec);
I tried editing the code to :
app.stdEditField.Value=std(single(col_vec))
Or
app.stdEditField.Value=std(double(col_vec))
But the error still pops up.
4 commentaires
Adam Danz
le 16 Juin 2022
Please show us the results of data{:,2}, a few rows will be sufficient.
It may be helpful to see the results of std(col_vec) as well.
If col_vec is not a vector, then the result of std will not be a scalar. Table columns can contain matrices, for example.
Another possibility is that std is returning a NaN or Inf which may not pass the UI component validation.
Réponse acceptée
Adam Danz
le 16 Juin 2022
Modifié(e) : Adam Danz
le 16 Juin 2022
Your data contains a NaN value.
data=readtable('tests1.csv','NumHeaderLines',9);
col_vec=data{:,2};
n = sum(isnan(col_vec));
fprintf('There are %d NaN values in col_vec\n', n)
std(col_vec)
Where is the NaN value?
nanLoc = find(isnan(col_vec));
fprintf('NaN in row %d', nanLoc)
When there is at least 1 NaN in a vector, std will return NaN.
Options:
- Figure out why there are NaNs and replace them (manually, smoothing, interpolation, etc)
- Ignore the NaNs: S = std(___,nanflag)
sd = std(col_vec,'omitnan')
2 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur NaNs dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!