所以我从iPad应用程序中获得了一些数据,这些数据创建了一个名为subj
的单元格数组,这样在subj
我可以访问我的iPad游戏中的结果。我有40个人的结果。如果我输入subj{1}.correct
,它会向我提供30个问题的结果 - 1或0,如果它们是正确/错误的,1 x 30
矩阵,对于主题1.如果我键入subj{1}.stimulus
它告诉他们提出了什么问题。共有30个问题,但每个人都是以随机顺序收到的。如何获得带有主题编号,结果和所有排序的1个矩阵,以便按问题排序#?
如果我每次手动更改subj号码,此代码有效,那么如何为所有40位参与者循环播放该号码?
C1 = subj{1}.correct
C1 = C1'
S1 = subj{1}.stimulus
S1 = S1'
S1 = sort(S1)
A1 = table(C1,S1);
%count, n, subj - will be in workspace
以下是我尝试循环的内容,但它不起作用:(
for n = 1:40;
A{n} = subj{n}.correct
B{n} = A{n}'
C{n} = subj{n}.stimulus
D{n} = C{n}'
E{n} = table(B{n},D{n})
end
这是一个错误:
将单元格内容分配给非单元格数组对象。
答案 0 :(得分:2)
上述代码的直接问题是您必须拥有一个名为A
,B
,C
,D
或E
的变量您的工作区已经完成,因此分配失败。为了确保没有发生这种情况,您可以在循环之前预先分配这些变量
A = cell(size(subj));
我想要的是先在第一个主题上使用unique
获取所有刺激的列表
stimuli = unique(subj{1}.stimulus);
我们可以将其用作"参考订单"刺激,并确保所有其他科目按此顺序排序。
然后我会预先分配你的结果矩阵并用一个简单的循环填充它,我们使用ismember
来确定哪个刺激列在哪里(second output给我们这个索引)和然后使用它来重新排序correct
字段。得到的矩阵将为nSubjects x nStimuli
,并且刺激的顺序与上面的stimuli
相同。
results = false(numel(subj), numel(stimuli));
for k = 1:numel(subj)
[~, inds] = ismember(subj{k}.stimulus, stimuli);
results(k,:) = subj{k}.correct(inds);
end
如果您希望输出位于table
,则可以使用array2table
进行转换
T = array2table(results, 'VariableNames', stimuli);