MATLAB evalについて
조회 수: 33 (최근 30일)
이전 댓글 표시
data_n=tableデータを任意の数作りたいのですが、以下ではエラーがでてしまします。
良い方法はありますでしょうか 。
for i= 1:id_length
eval('data%i=%s;',i,rawdata(:,"Load_Name"));
end
댓글 수: 2
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.
채택된 답변
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} で参照することができます。
詳細は以下のドキュメントを参照してください。
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 ビッグ データの処理에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!