2014-03-30 41 views
0

我希望在循環中更改變量名稱。這個名字被寫在一些單元陣列,喜歡這裏:帶兩個循環的表格中的變量替換

http://imgur.com/szqGzkH

ML.species1{1:end,end+1}=0; 
i=1:height(ML.species1); 
     ML.species1{i,end}=(ML.species1.someindex(i)*3+(ML.species1.someotherindex(i) 
end 

我不能只調用變量的名稱,並說ML.(ML.speciesname{1,1}){i,end}= ......爲什麼不呢?

如果這應該工作,編號喜歡圍繞基本計算第二個循環,只是交換這裏的變量ML.speciesname{1,j}通過將我的索引j移動到列名稱2,3 ......這是如何工作的?

+0

試圖理解 - 你想通過不同的名稱調用變量?這個名字是如何得到的?從某個字符串?你想在什麼範圍內做到這一點?使用不同名稱的局部變量調用函數是否足夠?對不起 - 我認爲你需要更具體地說明你要做什麼 - 以及爲什麼。 – Floris

+0

非常感謝你問這個。是的,我想打電話給一個變量,看起來像這樣 ML.species1 = ... 而ML.species2 = ... 但我想引用我自己的一些名字寫在一個字符串。 然後我想用這個不同的變量來計算東西,並將結果存儲在第一個計算結果與第一個變量計算在其他地方。然後我想跳到下一個變量,它又是在字符串中。 – Easyquestionsonly

回答

2

仍然不是100%肯定你正在嘗試做的事情 - 但我相信下面的應該有所幫助:

你可以在一個結構訪問以不同的方式的一種元素:

ML.element1='hello world'; 
fieldName = 'element1'; 
disp(getfield(ML, fieldName)); 

,你可以請參閱使用getfield我可以訪問一個元素,即使在我編寫代碼的時候我不知道元素的名稱(只要我在變量中有名稱)。

同樣,你可以使用setfield創建一個元素:

setfield(ML, fieldName, 'goodbye world'); 
disp(ML.element1); 

更新 - 如果你想指數,你可以做以下特定的(變量)字段名的元素:

fieldname = 'one'; 
ML.(fieldname) = [123 234]; 
ML.(fieldname)(3) = 456; 
disp(ML) 

ML = 

    one: [123 234 456] 

注意 - 訣竅是圍繞字段的(變量)名稱的()括號。

+0

儘管我得到你的例子,我不太明白如何調用動態字段名,你將如何做一個計算,需要索引到不同的行? – Easyquestionsonly

+0

也許讓我改述我的問題,你如何索引一個特定的字段名? – Easyquestionsonly

+1

它花了我一些時間,但它確實只是括號內的事情。非常感謝! – Easyquestionsonly

2

您可能會發現使用字符串定義變量名稱和值的eval函數很有用。例如,如果你有你想給在strVarName變量(一個字符串),並且它在dValue的值(雙)的名稱,你可以寫:

eval([strVarName ' = ' num2str(dValue) ';']); 

Documentationeval

+0

我不完全確定OP的結果。我用玩eval的想法,但是因爲看起來他是在一個結構的元素之後,我不確定這會起作用。但對於這種一般類型的問題,這絕對是一個有用的功能。由於您包含指向文檔的鏈接,因此我投了票。 – Floris

+0

我其實更喜歡你的答案,因爲我不知道'getfield',並且一直使用'eval'來做很多基於名字的解析。這一定會派上用場。 – buzjwa

+0

謝謝你的評價,但我認爲它更多這個getfield我應該能夠使用。我發現有關從變量生成字段名稱的更多信息,但我認爲我沒有看到從樹上的森林 http://www.mathworks.de/de/help/matlab/matlab_prog/generate-field-names-from-variables .html – Easyquestionsonly