Joe
Joe

Reputation: 871

Matlab: how to rename a sub-field

Let me describe the question in this way. I have a .mat file, and if I open it, it contains a 1x10 struct data. In each data, it has a 1x5 struct (or field) called res. In res, it has a 1x1 struct (or field) called, let's say, foo. Thus, I have ixj copies of data(i).res(j).foo .

Is there anyway I can change the name of this foo? say I want all data(i).res(j).foo to become data(i).res(j).bar

I did search on the internet, and tried a few ways (add field and delete, create a temp field, use cell2field or fieldtofile, etc.) and all of them didn't work. The most frequent returned error is "Subscripted Assignment between dissimilar structures."

Please help, thanks in advance!

Upvotes: 0

Views: 453

Answers (2)

Joe
Joe

Reputation: 871

Thanks caoy and NotLikeThat. I finally came to an conclusion.

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 probably need to removed i, j, and data2 after running this script.

Upvotes: 1

Yanshuai Cao
Yanshuai Cao

Reputation: 1297

The safest way is probably by looping over data twice, the first pass creating a new field bar for each subfield like data(i).res(j).bar=data(i).res(j).foo, then the second pass deletes the old fields like data(i).res(j) = rmfield(data(i).res(j),'foo').

Upvotes: 1

Related Questions