2016-05-05 21 views
3

Ich habe eine Schleife, die den Mittelwert (m), Standardabweichung (std) und Standardfehler (sem) für mehrere Bedingungen berechnet. Da jede Bedingung eine eigene m, std und sem hat, möchte ich meine Ausgabe entsprechend benennen (sie sollten im Doppelformat sein). Zum Beispiel: cond1_m, cond1_std, cond1_sem, cond2_m, cond2_std, cond2_sem usw.Variablennamen dynamisch ändern

Das ist, was ich versucht:

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 

Hinweis: compute_stats ist die Funktion, die m, std und sem ausgibt. M ist die Matrix, die meine Daten enthält. Das Problem ist, dass die strcat scheint nicht zu funktionieren, um den Namen meiner Ausgabe zu ändern. Zum Beispiel für Iteration 1, anstatt mir cond1_m zu geben, ist meine Ausgabe eine Matrix namens strcat.

Kann jemand helfen?

+0

Bitte [verwenden Sie nicht 'eval' in Matlab] (http://stackoverflow.com/questions/32467029/how-to -senden-diese-Bilder-zusammen). Ich schlage vor, eine Struktur mit dynamischen Feldnamen zu verwenden, mit der Syntax 'condstruc. ([Num2str (a), '_m'])' usw. –

Antwort

7

Verwenden Sie stattdessen eine Struktur, die für Ihre Zwecke sehr geeignet ist. BTW, verwenden Sie nicht cond als Variablenname. Es gibt eine Funktion namens cond, die die Konditionsnummer einer Matrix berechnet. Die Verwendung von cond würde in diesem Fall diese Funktion überschatten. Sie können verlassen die cond1, cond2 usw. Felder, wie sie sind:

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 enthält gewünschten Ergebnisse zusammengestellt. Sie würden dann mit dem richtigen String-Namen auf die richtige Matrix zugreifen. Zum Beispiel, wenn Sie den std Ausgang für die erste Bedingung wollen, tun:

out = result.cond1_std; 
+0

Vielen Dank. Ich habe versucht, eine Struktur zu verwenden, aber darauf bestanden, strcat (dh, Ergebnis. (Strcat (cond {a}, '_ m') und klar, dass das nicht funktioniert. –

+0

@ A.Rainer Ah :). Stellen Sie sicher, dass Sie einkapseln Die Zeichenfolge mit '[]' oder es funktioniert nicht, wenn es darum geht, Felder in Strukturen dynamisch zu erstellen. – rayryeng