MATLAB evalについて

data_n=tableデータを任意の数作りたいのですが、以下ではエラーがでてしまします。
良い方法はありますでしょうか 。
for i= 1:id_length
eval('data%i=%s;',i,rawdata(:,"Load_Name"));
end

2 Commenti

Dyuman Joshi
Dyuman Joshi il 20 Feb 2024
Modificato: Dyuman Joshi il 20 Feb 2024
DO NOT USE EVAL.
Dynamically naming variables (and subsequently using eval) is not a good coding practice. That is explained in length here - https://in.mathworks.com/matlabcentral/answers/304528-tutorial-why-variables-should-not-be-named-dynamically-eval
This (official) documentation page also advices to avoid using eval for the same - https://in.mathworks.com/help/matlab/matlab_prog/string-evaluation.html
A robust alternative (for reading data into MATLAB) is to read the data using the appropriate function, e.g - load for .mat files, and readtable/readmatrix/readcell for various different file formats.
If you want to access data from an existing variable in MATLAB, use indexing.
晃平
晃平 il 21 Feb 2024
Thank you for your comment.
It was very helpful.

Accedi per commentare.

 Risposta accettata

Tak
Tak il 20 Feb 2024
Modificato: Tak il 20 Feb 2024

0 voti

eval は書式演算子を受け付けません。
以下のように文字列を連結するか、書式演算子を使うなら sprintf などで実行可能なMATLAB式を作成する必要があります。
文字列の連結の場合
eval(['data' num2str(i) ' = rawdata(:,"Load_Name");'])
書式演算子を使うなら sprintf
eval(sprintf('data%d = rawdata(:,"Load_Name");', i))
ただし、コメントでも引用されていますように、eval で連番の変数名を生成するようなコードは好ましくないとされています。
繰り返し参照している rawdata がすべて同じ行数であれば配列やテーブル、そうでなければセル配列として管理する方が良いでしょう。
以下はセル配列に各データを代入する例です。
data = cell(1,id_length);
for i= 1:id_length
data{i} = rawdata(:,"Load_Name");
end
セル配列に格納された各データは data{n} で参照することができます。
詳細は以下のドキュメントを参照してください。

4 Commenti

晃平
晃平 il 21 Feb 2024
コメントありがとうございます。
eval は奨励されて居りませんので、
以下の方法で変数をワークスペースに登録したいです。
よろしくお願いいたします。
data{1,1}:文字列変数 A,B,Cなど
data{1,2}:数値   1,2,3など
で、ワークスペースに
A=1
B=2
C=3
と登録したいです。
Dyuman Joshi
Dyuman Joshi il 21 Feb 2024
Modificato: Dyuman Joshi il 21 Feb 2024
@晃平, As I said above, Dynamically naming variables i.e. forcing meta-data (here the meta-data is alphabets) into variable names is not a good practice.
Please specify -
Why do you want to do that?
What would do you with that variables?
What is the objective?
Tak
Tak il 21 Feb 2024
質問の内容が変わっていますが、別の質問として再投稿されましたのでそちらに回答しました。
晃平
晃平 il 26 Feb 2024
ご回答ありがとうございます。

Accedi per commentare.

Più risposte (0)

Prodotti

Release

R2022b

Tag

Richiesto:

il 20 Feb 2024

Commentato:

il 26 Feb 2024

Community Treasure Hunt

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

Start Hunting!