我正在尝试使用eval
将cellValue分配给结构中的字段。该结构已经预先初始化。我收到一个我无法删除的horzcat错误。你能帮帮我吗?另外,我知道不建议使用eval
。你能否提出一个可以在这里使用的更好的替代方案。 cellValue是一个有大约200,000行的大单元格,这一步骤将重复运行。因此需要矢量化和效率。谢谢!
varA = struct('Raw', -1, 'ttm', -1, 'USD', -1) ;
cellValue = { 'AAPL' [10010] 'abc' ;
'AAPL' [10020] 'abc' ;
'AAPL' [10030] 'abc' } ;
eval([varA '.Raw = ' cellValue ]) %gives horzcat ERROR
%varA.Raw = cellValue
的所需结果varA =
Raw: {3x3 cell}
ttm: -1
USD: -1
答案 0 :(得分:2)
您可以添加另一个嵌套级别,并使用dynamic field names来引用变量名称:
varName = 'A';
vars.(varName).Raw = value;
现在vars
是一个结构,其中字段也是结构。所以你可以访问它们:
>> vars
vars =
A: [1x1 struct]
B: [1x1 struct]
C: [1x1 struct]
>> vars.A
ans =
Raw: {3x3 cell}
ttm: -1
USD: -1
>> vars.A.Raw
ans =
'AAPL' [10010] 'abc'
'AAPL' [10020] 'abc'
'AAPL' [10030] 'abc'
答案 1 :(得分:2)
这个表达式:
[varA '.Raw = ' cellValue ]
试图将struct,string和cell连接成一个矩阵,这是不可能的。这就是为什么你得到一个horzcat错误。我不确定你使用eval的原因。这可以达到您想要的效果:
varA.Raw = cellValue;
如果你真的想要在eval中,你可以做
eval('varA.Raw = cellValue;')
答案 2 :(得分:0)
这很有效:
str = strcat(varA,'.Raw = cellValue ')
%varA changes every time. cellValue name is constant.
eval(str)