4

収集した生物医学データのデータ分析のために、matlab でプログラムを作成しています。計算は非常に簡単ですが、繰り返しが多いので、小さなプログラムを書くことに興味があります。患者ごとに 1 つの行列 (200 x 99) があり、患者の名前を持つ変数に格納されています。この患者マトリックスから必要なものすべてを含む出力変数 (finalresult) を結果として返す関数を作成しました。

この出力変数に入力変数の名前を付けたいと思います。そうすれば、関数を呼び出すたびに出力変数の名前を手動で変更する代わりに、患者ごとに個別に関数を呼び出すだけで、後でワークスペース内の変数のリストを取得できます。

私が達成したいことを理解していただければ幸いです。これは私のコードの単純化された例です:

function [ finalresult] = total_analysis( patientname)
    first = patientname(:,1)*2;
    second = first;
    finalresult = vertcat(first,second);
end

=> 出力変数名は常にfinalresult です

しかし、「一意の他の」出力 variablename、できれば finalresult_patientname または patientname にしたいと思います

4

4 に答える 4

1

これは明らかに悪い設計ですが、evalin関数を使用できます。次のようなもの:

cmd = sprintf('result_%s = %f', suffix, result);
evalin('caller', cmd);

myfunc次に、出力を割り当てずに関数を呼び出します。

繰り返しますが、ほとんどのユーザーはこの動作を期待していないため、これは良い考えではありません。関数は、呼び出し元が選択した任意の変数に結果を代入できるようにしながら、結果を返すことが期待されています。

小さなハックには適していますが、長期的なコードには適していません。

于 2012-11-30T07:01:38.183 に答える
1

結果と患者名を含む構造体を返さないのはなぜですか?

function [ finalresult] = total_analysis( patientname)
    first = flexion(:,1)*2;
    second = first;
    finalresult.data = vertcat(first,second);
    finalresult.name = patientname;
end
于 2012-11-29T21:08:57.217 に答える
1

すべてのデータを単一の変数に格納する matlab で構造体配列を使用することをお勧めします。

    s(1).name    = 'Jane';                      % Store patient's name here as a string
    s(1).data    = janesData;                   % Store patient's data
    s(1).result  = total_analysis( s(1).data )  % Store the analyzed data

    s(2).name    = 'John';                      % Store patient's name here as a string
    s(2).data    = johnsData;                   % Store patient's data
    s(2).result  = total_analysis( s(2).data )  % Store the analyze

すべての患者データについても同様です。次に、s(i) を使用して、i_th の患者に関連付けられたすべての変数を取得できます。

于 2012-11-29T21:09:02.100 に答える
0

あなたのコメントに加えて、 eval を使用してワークスペース変数に動的に名前を付ける例を次に示します。

>> string = 'patient1';
>> eval(strcat(string, '_finalresult = 200'))

patient1_finalresult =

   200
于 2012-11-29T21:46:56.417 に答える