我对matlab还很陌生,但经过数小时的努力,我似乎不得不直接询问,因为我发现的任何东西都没有直接帮助
我想做的是构建一个单元格数组,其中包含我必须循环的各种变量。目前,我已经很好地创建了这个单元数组,但循环覆盖了结果。我一直在寻找保存输出的方法,并且已经成功了,但只使用了不涉及单元阵列的示例:(
这是代码(如果看起来很糟糕,请原谅我):
subject = {'505','506'}
pathname_read = 'a path';
nsubj = length(subject);
curIndex=0;
for s=1:nsubj
Cond={'HiLabel','LowLabel'};
ncond=length(Cond);
for e=1:ncond;
curIndex=curIndex+1
line=line+1
curCond=Cond{e};
curFile=[pathname_read subject{s} '_' Cond{e} '.set'];
curSubject=subject{s};
curSet={'index' curIndex 'load' curFile 'subject' curSubject 'condition' curCond};
end
end
curSet是构建的单元数组。我见过用curSet(e)这样的方法从循环中提取,但在这里它不起作用。
最终我想要的结果是这样的:
curSet=
{'index 1 'load' path/file 'subject' 505 'condition' HiLabel};
{'index 2 'load' path/file 'subject' 505 'condition' LoLabel};
{'index 3 'load' path/file 'subject' 506 'condition' HiLabel};
{'index 4 'load' path/file 'subject' 506 'condition' LoLabel};
我也想找到一种方法来获得;每行之后。我想,一旦全部收集起来,它可能是一种字符串,因为它会"粘贴到一个看起来像的函数中">
doSomething(A, 'command',{ My generated curSet });
更改线路
curSet = {'index' curIndex 'load' curFile 'subject' curSubject 'condition' curCond};
至
curSet(curIndex,:) = {'index' curIndex 'load' curFile 'subject' curSubject 'condition' curCond};
这样,您可以在每次迭代时添加一行,而不是覆盖。最终结果是
>> curSet
curSet =
'index' [1] 'load' [1x21 char] 'subject' '505' 'condition' 'HiLabel'
'index' [2] 'load' [1x22 char] 'subject' '505' 'condition' 'LowLabel'
'index' [3] 'load' [1x21 char] 'subject' '506' 'condition' 'HiLabel'
'index' [4] 'load' [1x22 char] 'subject' '506' 'condition' 'LowLabel'
/edit Luis建议创建单元格数组更好,删除了我的代码。
结构最好与您正在创建的数据结构相匹配。代码看起来像:
subject = {'505','506'};
pathname_read = 'a path';
nsubj = length(subject);
curIndex=0;
line=0;
curSet=[];
for s=1:nsubj
Cond={'HiLabel','LowLabel'};
ncond=length(Cond);
for e=1:ncond;
curIndex=curIndex+1;
line=line+1;
cr.index=curIndex;
cr.load=[pathname_read subject{s} '_' Cond{e} '.set'];
cr.subject=subject{s};
cr.condition=Cond{e};
curSet=[curSet cr];
end
end