How do I use cellfun to check numbers in a nx1 cell for an if statement?
3 次查看(过去 30 天)
显示 更早的评论
I have a cell array which contains values 0 or 1. I want to look into this cell array and create an if statement that will allow me to distinguish between 2 types of messages. The cell array is similar to the following:
1
1
1
0
1
0
0
0
1
...
Where it is a 90x1 cell. The problem I am having is creating a if statement to read each cell and than categorize the cell as appropriate.
Currently I am trying the following (Where ab is my 90x1 cell):
if cellfun(@double,ab)==1
sync1 =cellfun(@(x) x(1:4),hex,'UniformOutput', false); %break up message
comm1=cellfun(@(x) x(5:8),hex,'UniformOutput', false);
...
elseif cellfun(@double,ab)==0
sync2 =cellfun(@(x) x(1:4),hex,'UniformOutput', false);
comm2=cellfun(@(x) x(5:8),hex,'UniformOutput', false);
...
end
The "..." is where I categorize this data based on whether it is a "1" or "0". I am not getting my if statement to work for each value in the cell array. I do not have errors but none of my scripts following the if and ifelse statement are executing so I know I am not writing my cellfun correct.
Any help is greatly appreciated.
Thank you.
采纳的回答
更多回答(1 个)
Jan
2013-3-14
When ab is your cell, cellfun(@double, ab) converts its elements to a double vector. Then if cellfun(@double,ab)==1 is equivalent to:
d = [ab{:}];
if d==1
When if gets a vector as condition, it performs this implicitly:
if all(d==1) & ~isempty(d)
I do not think, that this is your intention. But currently it is not clear, what your program should achieve. I believe, you do not need cellfun at all, but this would be much easier:
if ab{1} == 1
sync1 = x(1:4);
comm1 = x(5:8);
else % No condition required, if the input can be 0 or 1 only
sync2 = x(1:4);
comm2 = x(5:8);
end
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Cell Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!