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