【问题标题】:matlab: loop through var=who(*x*) and use variable names to call the variablesmatlab:遍历 var=who(*x*) 并使用变量名来调用变量
【发布时间】:2016-08-16 15:36:49
【问题描述】:

我需要一个函数来选择我的工作区中的特定变量(使用通配符),将它们的值(=这些变量的值)分配给一个新变量, (这是我卡住的部分)操作它们,然后将这个新变量保存在旧变量名下。

varnames= who('*_small_*');

for n=length(varnames)
    new = str2cell(varnames(n);  %THIS STEP DOES NOT WORK.
    %manipulation of those values;
    filename=varnames(n);
    save(filename,new);
end;

有人知道如何调用我需要的变量并提取它们的值吗?可能我的解决方案不是最好的,所以请随意提出替代方案。

非常感谢!

【问题讨论】:

  • 请发布没有语法错误的代码。另外,问题和代码的含义不匹配,所以也请修复它。
  • 最好的替代方法是构建代码,以便您确切知道需要操作哪些变量。这些你不知道的变量是从哪里生成的?
  • 对不起,我忍不住发表评论。您的方法将使您失去对代码的所有控制。您不知道何时分配变量,何时覆盖它们或在何处使用它们。请再次考虑您的设计,并将单元格也考虑在内。除此之外。您的代码中有许多语法错误。请修复这些。我也很难提供帮助,因为甚至不需要您遇到问题的步骤。请同时更新此部分以提高理解。
  • 对不起,我是这个论坛的新手。感谢您的反馈和帮助,我的下一篇文章会更清楚!

标签: matlab workspace


【解决方案1】:

1.不要使用str2cell。而是使用大括号。

varname = varnames{n};

2.eval 函数不是最佳实践,但它可能是解决此问题的最简单方法。

eval(sprintf('new = %s;',varname)); %assign variable with varname to new

3.如果您只是覆盖工作区中的变量,请不要使用保存。再次使用 eval 即可。

eval(sprintf('%s = new;',varname)); %assign 'new' value to varname

【讨论】:

  • 你应该尝试evoid eval whenever possible。这里也是。如果它不是“最佳实践”,我会说不要教给其他人。而是教他们最佳实践。
  • 如果您有避免使用eval 的替代方案,我很想看看。在这个问题的范围内,我不知道在不显着增加复杂性的情况下解决它的方法
  • 那是因为期望的行为非常糟糕,需要一个糟糕的解决方案。
  • 感谢 Trogdor 的帮助,工作又快又脏! :) excaza 你的反馈不太有建设性。 “期望的行为很差”。这有点冒犯,我猜。判断的人应该知道代码的上下文和目的。 ...到目前为止一切顺利,下次我使用这个论坛时,我会尝试一个中性的用户名:D
猜你喜欢
  • 1970-01-01
  • 2019-12-29
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多