2012-07-12 238 views
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層個子結構。我究竟做錯了什麼??這是一個雙倍,所以它應該沒問題,我想。

+0

'MetabMapSDString'是否總是包含有效的字段名?你檢查錯別字了嗎? – 2012-07-12 20:25:55

+0

從我檢查後告訴我有沒有錯別字。出於某種原因,現在錯誤沒有發生。 – 2012-07-12 20:47:00

+0

錯誤似乎不一致。我似乎無法再讓它發生,我也沒有改變任何東西。 – 2012-07-12 20:52:44

回答

11

當您不小心傳遞一個單元格數組而不是字符串時,Matlab可能會給出這種有時會產生誤導性的錯誤消息。下面的例子給出了同樣的錯誤:

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

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

如果這是你的問題(測試用例如whos實際類型的字段名),它應該幫助說f = char(f)

+0

'f = f {:}'或'f = f {1}'也可以,不確定是否有任何特別的優勢。 +1 – zelanix 2015-02-28 15:11:27

+0

@zelanix'char'的好處是你可以做'char(f(1))',但不能'f(1){1}' – Bernhard 2015-07-24 11:02:20

2

一個字符串在matlab中被表示爲單元格。而文字字符串的類型是char數組。 他們打印不同。單元串打印爲

ans = 

    'abc' 

而普通字符數組打印爲

​​

現在談到的兩個內建函數的區別是:cellstr轉換字符數組爲字符串而char轉換單元串,以字符數組。

所以在你的情況下,你應該使用char(MetabMapSDString)作爲你的動態結構參考。

相關問題