2017-01-23 38 views
0

因此,我從一個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 

這是一個錯誤它說:

Cell contents assignment to a non-cell array object.

回答

2

上面代碼的直接問題是您的工作空間中必須有一個名稱爲AB,C,DE的變量,因此t他的任務是失敗的。爲了確保這種情況不會發生循環

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); 
+0

感謝您的答覆!那麼,我只是運行你發送的所有東西?爲什麼刺激部分有subj {1}?此外,我跑了這個,並收到了這個錯誤:下標索引必須是真正的正整數或 邏輯。 – mathpun

+0

@ user3290443你確定所有用戶總是回答*所有*問題嗎? – Suever

+0

好吧,你完全改變了我的代碼,我不知道發生了什麼 - 你可以多用一點幫助 - 我以爲我是親密的,因爲它在單獨的試驗工作,但你的代碼使用了很多我以前從未見過的東西,我只是一個初學者 – mathpun