check if numbers exist in a structure field

9 ビュー (過去 30 日間)
Katherine
Katherine 2014 年 1 月 10 日
コメント済み: Image Analyst 2014 年 1 月 10 日
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 件のコメント
Jos (10584)
Jos (10584) 2014 年 1 月 10 日
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 2014 年 1 月 10 日
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.

サインインしてコメントする。

回答 (1 件)

Simon
Simon 2014 年 1 月 10 日
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 件のコメント
Matt J
Matt J 2014 年 1 月 10 日
編集済み: Matt J 2014 年 1 月 10 日
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 2014 年 1 月 10 日
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)

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeStructures についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by