2014-04-01 92 views
0

讓我以這種方式描述問題。我有一個.mat文件,如果我打開它,它包含一個1x10結構數據。在每個數據中,它都有一個名爲res的1x5結構(或字段)。在res中,它有一個叫做1x1的結構(或字段),比方說,foo。因此,我有ixj數據副本(i).res(j).foo。Matlab:如何重命名子字段

有反正我可以改變這個foo的名字嗎? (i).res(j).foo成爲數據(i).res(j).bar

我在互聯網上搜索,並嘗試了幾種方法(添加字段和刪除,創建一個臨時字段,使用cell2field或fieldtofile等),所有這些都不起作用。最常見的返回錯誤是「不同結構之間的下標分配」。

請幫忙,提前致謝!

+0

爲什麼你不能將它複製到新名稱,然後修剪前一個? – EngrStudent

+0

對不起沒有解釋清楚。請看下面,你會知道它。 – Joe

回答

1

感謝caoy和NotLikeThat。我終於得出結論。

data2 = data 
for i=1:10 
    for j = 1:5 
     data(i).res(j).bar = data2(i).res(j).foo; 
    end 
    data(i).res = rmfield(data(i).res, 'foo'); 
end 

運行此腳本後,我可能需要刪除i,j和data2。

1

最安全的方式可能是通過循環兩次數據,第一遍爲每個子字段創建一個新的字段欄,如data(i).res(j).bar=data(i).res(j).foo,然後第二遍刪除舊字段,如data(i).res(j) = rmfield(data(i).res(j),'foo')

+2

你可能會失去使用列表的力量的內部循環:'[data(i).res.bar] = data(i).res.foo;'。 'rmfield'對struct數組起作用,所以不需要內部循環。 – Notlikethat

+0

感謝Notlikethat,我試過'data(i).res = rmfield(data(i).res,'foo')',它工作正常。不幸的是,數據(i).res(j)= rmfield(data(i).res(j),'foo')將不起作用,抱怨「不同結構之間的下標分配」。 – Joe