MATLAB evalについて

5 次查看(过去 30 天)
晃平
晃平 2024-2-20
评论: 晃平 2024-2-26
data_n=tableデータを任意の数作りたいのですが、以下ではエラーがでてしまします。
良い方法はありますでしょうか 。
for i= 1:id_length
eval('data%i=%s;',i,rawdata(:,"Load_Name"));
end
  2 个评论
Dyuman Joshi
Dyuman Joshi 2024-2-20
编辑:Dyuman Joshi 2024-2-20
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.
晃平
晃平 2024-2-21
Thank you for your comment.
It was very helpful.

请先登录,再进行评论。

采纳的回答

Tak
Tak 2024-2-20
编辑:Tak 2024-2-20
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 个评论
Tak
Tak 2024-2-21
質問の内容が変わっていますが、別の質問として再投稿されましたのでそちらに回答しました。
晃平
晃平 2024-2-26
ご回答ありがとうございます。

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 文字と文字列 的更多信息

标签

产品


版本

R2022b

Community Treasure Hunt

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

Start Hunting!