Azzera filtri
Azzera filtri

check if numbers exist in a structure field

15 visualizzazioni (ultimi 30 giorni)
Katherine
Katherine il 10 Gen 2014
Commentato: Image Analyst il 10 Gen 2014
I have a set of values in a vector that I would like to loop over to check whether they exist in a structure field--is there any easy way to do this without causing an index error. I want to check whether all of the values in j,
where j=[1:79 356:366], exist in my structure files(1,1).day(j).median.
I was trying to loop over the elements of j and set restrictions via if then statements. The cases I would like to test but am not sure how to test are:
-whether the values exist in the structure field. If they exist I would like to calculate a value
-whether they are empty (no data) I would like to skip them and continue looping through the rest of the values of j
-whether they exist in the structure field at all--skip and continue looping through the rest of the values of j
-If 80% of the numbers exist I would like to calculate something as well.
I've tried a slew of things but keep getting the indexing error. Can anyone point me to how I would set up this logic?
  2 Commenti
Jos (10584)
Jos (10584) il 10 Gen 2014
So, you have a situation like this
files.day(1).median = 1
files.day(3).median = 3
files.day(4).median = 3
with files.day(2).median being therefore empty, and
j = [1 2 4]
A = [files.day(j).median]
produces the wrong result in A? because you want to be something like [1 NaN 4] ?
Katherine
Katherine il 10 Gen 2014
I have a situation where for this current data set files(i,1).day(k) has 335 days in it. I want to make a versatile code so that k could be any number of days. I essentially want to test whether the day values in j exist in the actual dataset because I am trying to compile seasonal calculations but only based on the actual dataset that I have. So for j = [1:79 356:366] I am trying to test whether the dataset has julian days for the winter, and if they exist I want to pull out the ones that actually exist and do a calculation, if they are empty I want to skip them, and if they don't exist I would like to skip them too.

Accedi per commentare.

Risposte (1)

Simon
Simon il 10 Gen 2014
Hi!
You may write
m = [files(1,1).day(:).median];
to get a vector of all values in 'day'. Then you can use ismember/intersect/setdiff/... to test which values exist.
  3 Commenti
Matt J
Matt J il 10 Gen 2014
Modificato: Matt J il 10 Gen 2014
This won't work if some
files.day(k).median=[]
are empty. A modification of Simon's technique that would work is
m={files(1,1).day(j).median}; %fill cell array
empty_days = j(cellfun('isempty',m))
Image Analyst
Image Analyst il 10 Gen 2014
You can use fieldnames to determine if a member of a structure, such as day or median above, actually exist.
fieldnames(files)
fieldnames(files.day)
fieldnames(files.day.median)

Accedi per commentare.

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by