MATLAB Eval - 需要在里面使用字符串

时间:2014-07-28 22:38:45

标签: matlab

我需要评估以下语句isfield(PKPD_1, 'gamma'),其中PKPD_1是一个将会发生变化的变量,并且“#gamma;'是一个字符串。

所以我的第一种方法是eval(['isfield(PKPD_' num2str(i) ', gamma']),但是这种方法gamma变成了变量,而不是字符串。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

直接回答您的问题:使用两个单引号表示eval表达式中的单引号。

eval(['isfield(PKPD_' num2str(i) ', ''gamma'')'])

但是,正如你可能已经听过的那样,eval是邪恶的。在您的情况下,您很可能不需要使用eval。由于我不知道您的代码的上下文,我认为您应该查看有关Matlab中eval备选方案的MathWorks页面。它可以帮到你:http://www.mathworks.com/help/matlab/matlab_prog/string-evaluation.html

欢呼声, 安德烈

答案 1 :(得分:2)

您正在循环并尝试检查PKPD_iterationnumber是否具有gamma。

您可以尝试这样做,例如:

for i=1:10
  eval(sprintf(isfield(PKPD_%d, 'gamma'),i));
end

但是eval执行得更慢。请阅读:Matlab Looping Variables

答案 2 :(得分:1)

由于您的直接问题已得到解答,因此这里提出了如何避免使用eval的建议。 您可能可以使用动态索引。

http://www.mathworks.com/help/matlab/matlab_prog/generate-field-names-from-variables.html

如果您将所有结构体成员构建为单个结构,则可以像

一样循环
for n = 1:length(bigStruct)
    subStructName = sprintf('PKPD_%d',n);
    isfield(bigStruct.(subStructName),'gamma');
end