Append element to a cell

I am trying to loop over a cell array S and see if S{i,3} is equal to a j than add the elements of S{i,2} to X{j,1}
j = 1;
X = {};
while j < 29
X{j,1} = j;
for i = 1:length(S)
if S{i,3} == j
for k = 1:length(S{i,2})
X{j,2} =[X{j,2}, S{i,2}(k,1)];
end
end
end
j = j+1;
end
I get Index exceeds matrix dimensions for line 13.
Here is the cell array S:
And S{i,2} looks like this:

回答(2 个)

Guillaume
Guillaume 2018-7-9

0 个投票

Index exceeds matrix dimensions
Well, then considering that the only indexing is of your cell array, either it doesn't have two columns or it doesn't have i rows. In any case, X{i, 2} is not valid. If X{i, 2} were valid your syntax is indeed correct.

1 个评论

I edited my question. Actually the indexing of my cell array is not the only one

请先登录,再进行评论。

The message means, that X does not have either i rows or not 2 columns. You can check this easily using the debugger. Type this in the command window:
dbstop if error
Run the code again until stops at the error. Then check:
size(X)

4 个评论

I get [1,1] for the size
Actually if I run this
j = 1;
X = {};
while j < 29
X{j,1}=j;
for i = 1:length(S)
if S{i,3} == j
for k = 1:length(S{i,2})
X{j,2} = S{i,2}(k,1);
end
end
end
j = j+1;
end
Without trying to save what's in X{j,2} I get a cell array with 28 rows (which is what I want) it's just not saving what's in X{j,2} and append the S{i,2}(k,1) to the end of it
This is not useful:
for k = 1:length(S{i,2})
X{j,2} = S{i,2}(k,1);
end
It overwrite X{j,2} in each iteration. Maybe you want:
x{j,2} = S{i,2}
or
x{j,2} = S{i,2}(:, 1)
without a loop.
NOTE: Using length is prone to bugs, because it replies the longest dimension. If you want to get the length of the first dimension, use:
size(S, 1)
A cleaned version of your code:
X = cell(29, 2); % Pre-allocate
For j = 1:29
X{j,1} = j;
for i = 1:size(S, 1)
if S{i,3} == j
X{j,2} = [X{i,2}, S{i,2}(:,1)];
end
end
end
The pre-allocation creates X{i, 2} implicitly as [].
Are you sure that [X{ i ,2}, S{i,2}(:,1)] is wanted, not j ?
Thank you. You're right it's X{j,2}. But I want to append elementS in the same row in each iteration of j and not in different columns:

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Creating, Deleting, and Querying Graphics Objects 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by