including subject_name in variable with a loop

1 回表示 (過去 30 日間)
Ubu
Ubu 2012 年 3 月 20 日
Dear all,
We are running a script over several subjects in order to get mean reaction time data per condition out of each of them independently.
We have a simple loop:
subject = {subject_1 subject_2 subject_3 ...}
for i = 1: (length(subject))
... run the script
and here we would like to save our results in a new variable whose name would be accordingly "subject_1", "subject_2" and so on.. For example:
final_subject_1 = [mean1 mean2 mean3 mean4]
We thank you very much for any suggestion!
Best,
Udiubu

採用された回答

Grzegorz Knor
Grzegorz Knor 2012 年 3 月 20 日
eval(['final_subject_' num2str(i) '= [mean1 mean2 mean3 mean4]'])
  2 件のコメント
Ubu
Ubu 2012 年 3 月 20 日
Right it works, Grzeg, but we forgot to add that our subjects have strings like "WRDF" or "RWEX" and so on..
subject = {WRDF RWEX DFGR ..}
so the num2str function is not useful here..
We just used subject_1, subject_2 for making it easier to understand (but appartently it was not..) Sorry!
How would you proceed then?
Thanks
Daniel Shub
Daniel Shub 2012 年 3 月 20 日
Conceptually it is the same thing. Just replace num2str(i) with subject{i}.

サインインしてコメントする。

その他の回答 (2 件)

Geoff
Geoff 2012 年 3 月 20 日
This has already been solved for you, but I'll chip in.
In this case, there doesn't appear to be a good reason to use dynamic names. Why not put all your data into matrix form in the same order as the subjects?
means = zeros(length(subject), 4);
for row = 1:length(subject)
% do your stuff...
means(row,:) = [mean1 mean2 mean3 mean4];
end
If you're concerned about looking up a subject, make a quick helper function:
subject = { etc etc etc }; % This needs to come first.
find_subj = @(name) find( cellfun(@(s) strcmp(s,name), subject) );
Now, the means for subject_2:
means( find_subj('subject_2'), : )
This approach is far more flexible than using dynamic names. Consider this: how were you intending to plot your results?
  3 件のコメント
Geoff
Geoff 2012 年 3 月 20 日
Yeah I guess that's the proper term for that specific syntax. But I just meant any situation where you create a variable (or field) using a name that is set at runtime. I'm a MatLab newbie so I may be a bit loose with terminology. =)
Daniel Shub
Daniel Shub 2012 年 3 月 25 日
That is a fine use of "dynamic names", I just wanted to check to make sure I understood.

サインインしてコメントする。


Daniel Shub
Daniel Shub 2012 年 3 月 20 日
You can do it with eval, but then in a few days you will be back asking how to use the variables. This is a FAQ, and is generally not a good idea ...

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by