在Matlab中使用Eval的horzcat错误

时间:2011-07-29 18:16:43

标签: matlab matrix eval

我正在尝试使用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

3 个答案:

答案 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)