How to correct for 'Undefined function 'eq' for input arguments of type 'cell'' error message

Hi,
I have a simple bit of code and keep getting an error message,
>>
for Area = 1:652
if Area == out(:,1)
DateofB = out(:,2)
LocationSquare(Area) = DateofB
end
end
Undefined function 'eq' for input arguments of type 'cell'.
I've tried using curled braces instead in my if statement but that doesn't work.
I've also tried using an isequal term instead too but it doesn't like that either.
Am I going about this in the wrong way?
Thanks for any help, advice, direction that can be spared.

6 Comments

@Chameleon17: I edited your question and removed all of the leading spaces that you added to each paragraph of your question: leading spaces format the text as code.
Hi, Thanks for fixing it for me. Undefined function 'eq' for input arguments of type 'cell'.
Error in FIRST_OCCURRENCE_OB (line 46) if Area == out(:,1)
This is where I'm getting the error.
You have Area == out(:,1) . That makes it appear that you would be comparing a particular value to a vector of values. When you "if" something that is a vector of values, the result is only considered true if all of the values are considered true. Is that your intention, or did you want the comparison to succeed if any one of them is true, like any(Area == out(:,1)) ? Or do you need to know which of them is true?
Hi,
I would like it to be true for any.
Essentially, I have a 652 locations overall, numbered 1 - 652.
In my 'out' data I have two columns/vectors, the first has some of the numbered locations and the second has a date. Each location appearing only once in this file. I would like to file the date in column two for each location in the 'out' data into it's corresponding zero space in 'LocationSquare'.
out =
[ 38] '09-Jul-2003'
[102] '21-May-2003'
[114] '18-Jun-2003'
[124] '27-May-2003'

Sign in to comment.

Answers (2)

I've tried using curled braces instead in my if statement but that doesn't work.
See what you get when you do the following,
>> A={1,2,3};
>> if A{1}==1, disp 'Hello World', end
Hello World
>> if A==1, disp 'Hello World', end
Undefined operator '==' for input arguments of type 'cell'.
indices = cell2mat(out(:,1));
LocationSquare(indices) = out(indices,2);
No loop.
Note: this relies upon out(:,1) always being valid and unique.

4 Comments

Hi, thanks for that, I like not using the loop.
The first part is fine but the second part returns the error 'Subscript indices must either be real positive integers or logicals.' Is this because my second column is date format, is there a way around this error? Perhaps I should have changed the format of everything earlier in my code.
If the second part refers to the second line then it has nothing to do with the second column being in date string format. But I should probably have coded the right side as out(:, 2)
I predict that at least one of your column 1 values is 0 or negative or nan or inf or non-integral. Not a valid index in other words. My speculation is that you have some 0 in there that are intended to indicate that the second column is not to be placed anywhere.
Ah I see. Okay now my problem is
'Index exceeds matrix dimensions.
Error in FIRST_B (line 39) LocationSquare(indices) = out(indices,2);'
I'm assuming that this is because for each year my 'out' is a variable length depending on how many stations reported activity, and I am trying to file this into LocationSquare which is a 652 zero space. Am I right in thinking this is the problem? Perhaps I should try to file column one of the out before adding in the date information.
This is quite annoying, I have pulled the data I require I just can't seem to manage to save it the way I want to...

Sign in to comment.

Asked:

on 7 Aug 2015

Commented:

on 12 Aug 2015

Community Treasure Hunt

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

Start Hunting!