我希望在循环中更改变量名称。名称写在一些单元格数组中,如下所示:
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}
移动到列名2,3来逐个交换变量j
。 ..这有什么作用?
答案 0 :(得分:2)
您可能会发现eval
函数对于使用字符串定义变量名称和值很有用。例如,如果您有一个名称,您希望在strVarName
(一个字符串)中给出一个变量,并在dValue
(一个双精度)中给它一个值,您可以写:
eval([strVarName ' = ' num2str(dValue) ';']);
eval
的
答案 1 :(得分: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]
注意 - 诀窍在于()
括号内的(变量)名称周围。