动态结构引用的参数必须求值为有效的字段名称

时间:2012-07-12 20:18:28

标签: string matlab cell

我收到此错误“动态结构引用的参数必须求值为有效的字段名称。” 我有一个名为spectData的结构,它看起来像这样

spectData{1} = 

data: [256x26 double]
textdata: {1x26 cell}
colheaders: {1x26 cell}
Row: [256x1 double]
Col: [256x1 double]
Cho: [256x1 double]
Cho0x25SD: [256x1 double]
Cho0x2FCit: [256x1 double]
PCho: [256x1 double]
PCho0x25SD: [256x1 double]

我尝试在函数调用中指定它,代码行如下所示。这是matlab表示错误的代码行。

 SDdata = spectData{sliceNum - firstSlice}.(MetabMapSDString);

其中metabString是其中一个名称的字符串,例如“PCho0x25SD”,spectData总共有4个子结构,就像我显示的那样。我究竟做错了什么??这是一个双倍,所以我认为应该没问题。

2 个答案:

答案 0 :(得分:11)

当您意外传递单元格数组而不是字符串时,Matlab可能会给出这种有时会产生误导的错误消息。以下示例给出了相同的错误:

fields = {'foo', 'bar'}
s = struct('foo', 23, 'bar', pi)

for f = fields
  disp(f)
  s.(f) = 0
end

如果这是您的问题(使用例如whos测试您的字段名称的实际类型),则应该说f = char(f)

答案 1 :(得分:2)

字符串在matlab中表示为单元格。虽然文字字符串是char数组类型。 他们的印刷品不同单元格字符串打印为

ans =

    'abc'

而常规字符数组打印为

ans = 
abc

现在解决了两个内置函数的区别:cellstr将char数组转换为字符串,而char将单元字符串转换为char数组。

因此,在您的情况下,您应该使用char(MetabMapSDString)作为动态结构参考。