2016-05-05 2 views
3

У меня есть цикл, который вычисляет среднее значение (m), стандартное отклонение (std) и стандартную ошибку (sem) для нескольких условий. Поскольку каждое условие имеет свои собственные m, std и sem, и я хотел бы назвать свой вывод соответствующим образом (они должны быть в двойном формате). Например: cond1_m, cond1_std, cond1_sem, cond2_m, cond2_std, cond2_sem и т.д.Динамическое изменение имен переменных

Это то, что я пробовал:

cond={'cond1','cond2','cond3','cond4','cond5',...} 
    for a=1:length(cond) 
     [strcat(cond{a},'_m'),strcat(cond{a},'_std'),strcat(cond{a},'_sem')]=compute_stats(M(:,a)); 
    end 

Примечание: compute_stats это функция, которая выводит m, std и sem. M - это матрица, содержащая мои данные. Проблема в том, что strcat, похоже, не работает как способ изменения имени моего вывода. Для итерации 1, например, вместо того, чтобы давать мне cond1_m, мой вывод представляет собой матрицу с именем strcat.

Может ли кто-нибудь помочь?

+0

Пожалуйста [не используйте 'eval' в MATLAB] (http://stackoverflow.com/questions/32467029/how-to -Положите-эти-образы-вместе). Я предлагаю использовать структуру с динамическими именами полей с синтаксисом 'condstruc. ([Num2str (a), '_m'])' и т. Д. –

ответ

7

Рассмотрите возможность использования структуры, которая очень подходит для ваших целей. BTW, не используйте cond в качестве имени переменной. Существует функция, называемая cond, которая вычисляет номер условия матрицы. Использование cond в этом случае заслонит эту функцию. Вы можете оставить cond1, cond2 и т.д. поля, как они есть:

con={'cond1','cond2','cond3','cond4','cond5',...}; 
result = struct(); 
for a=1:numel(con) 
    [m, stdd, sem] = compute_stats(M(:,a)); 
    result.([con{a} '_m']) = m; 
    result.([con{a} '_std']) = stdd; 
    result.([con{a} '_sem']) = sem; 
end 

result содержит желаемые скомпилированные результаты. Затем вы получите доступ к правильной матрице, используя правильное имя строки. Например, если вы хотели std выход для первого условия, сделать:

out = result.cond1_std; 
+0

Спасибо. Я попытался использовать структуру, но настаивал на использовании strcat (т. Е. Result. (Strcat (cond {a}, '_ m') и, очевидно, это не сработало. –

+0

@ A.Rainer Ah :). Убедитесь, что вы инкапсулируете строка с '[]' или она не будет работать, когда дело доходит до динамического создания полей в структурах. – rayryeng

Смежные вопросы