nrz*_*nrz 2 matlab struct eval cell
我有一个名为struct的数组AnalysisResults,它可能包含任何MATLAB数据类型,包括其他结构数组和单元数组.
然后我有一个名为的字符串IndexString,它是特定子字段的索引StructArray,它可能包含不同结构数组和单元格数组的几个索引,例如:
'SubjectData(5).fmriSessions{2}.Stats'或'SubjectData(14).TestResults.Test1.Factor{4}.Subfactor{3}'.
然后我有一个名为的变量DataToBeEntered,它可以是任何MATLAB数据类型,通常是某种结构数组,单元数组或矩阵.
使用eval,很容易将数据输入到索引的字段或单元格IndexString:
eval([ 'AnalysisResults.', IndexString, ' = DataToBeEntered;' ])
Run Code Online (Sandbox Code Playgroud)
但有可能避免eval在此使用吗?setfield不起作用.
谢谢 :)
嗯,eval肯定是最简单的方法,但也是最脏的.
我想,"正确"这样做的方法就是使用subsasgn.您必须将部分MATLAB命令(例如SubjectData(5).fmriSessions{2}.Stats)解析为这些函数的正确表示.部分工作可以通过substruct,但这是最轻的部分.
例如,SubjectData(5).fmriSessions{2}.Stats需要翻译成
indexes = {'.' , 'SubjectData',
'()', {5},
'.' , 'fmriSessions',
'{}', {2},
'.' , 'Stats'};
indexStruct = substruct(indexes{:});
AnalysisResult = subsasgn(AnalysisResult, indexStruct, DataToBeEntered);
Run Code Online (Sandbox Code Playgroud)
您必须开发代码,以便indexes像上面那样制作单元阵列.它不应该那么难,但它也不是微不足道的.去年,我移植了一些eval具有类似用途的重型代码,看起来很简单,但很难让一切都完全正确.
| 归档时间: |
|
| 查看次数: |
1579 次 |
| 最近记录: |