4

我收到此错误“动态结构引用的参数必须评估为有效的字段名称。” 我有一个名为 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 个子结构,就像我显示的这个一样。我究竟做错了什么??这是双所以我想应该没问题。

4

2 回答 2

11

当您不小心传递了一个元胞数组而不是字符串时,Matlab 有时会给出这种误导性的错误消息。以下示例给出了相同的错误:

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

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

如果这是您的问题(使用 eg 测试您的字段名称的实际类型whos),说 . 应该会有所帮助f = char(f)

于 2013-01-09T14:08:40.060 回答
2

字符串在 matlab 中表示为单元格。而文字字符串是 char 数组类型。它们的打印方式不同。单元格字符串打印为

ans =

    'abc'

而常规的 char 数组打印为

ans = 
abc

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

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

于 2014-02-06T18:33:45.677 回答