String 动态结构引用的参数必须计算为有效的字段名

String 动态结构引用的参数必须计算为有效的字段名,string,matlab,cell,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]

动态结构引用的“错误”参数必须计算为有效的字段名 我有一个名为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个子结构,所有子结构都与我显示的类似。我做错了什么??它是一个双精度的,所以我认为应该可以。当您意外地传递一个单元格数组而不是字符串时,Matlab可能会给出这个有时会误导您的错误消息。以下示例给出了相同的错误:

fields={'foo','bar'}
s=struct('foo',23',bar',pi)
对于f=字段
显示(f)
s、 (f)=0
结束

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

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

ans =

    'abc'
ans = 
abc
而常规字符数组打印为

ans =

    'abc'
ans = 
abc
现在讨论两个内置函数的区别:
cellstr
将字符数组转换为字符串,而
char
将单元格字符串转换为字符数组


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

是否
MetabMapSDString
始终包含有效的字段名?你检查过拼写错误吗?检查后我告诉你没有拼写错误。由于某种原因,现在没有发生错误。错误似乎不一致。我似乎不能让它再次发生,我没有改变任何事情。那么恭喜你。将祈祷错误不再发生。添加一个try/catch块,每次发生错误时都检查MetamapsDstring和结构的字段。此外,由于将结构存储在单元格数组中,因此在索引到的特定结构中,字段可能不一致。只有结构数组保证具有一致的结构。
f=f{:}
f=f{1}
也可以工作,但不确定这两种方法是否有任何特殊的优势+1@zelanix
char
的优点是可以执行
char(f(1))
,但不能执行
f(1){1}