假设我有权访问使用load
函数创建的结构:
structWithVariables = load('data.mat');
我想将此结构中的所有变量加载到工作空间中,但如果不对所有变量的名称进行硬编码,我无法找到任何方法。
注意:我无法访问.mat文件,也没有加载结构的代码,我真的只有结构。
注意2:我想要这样做的原因只是使用一些引用变量的代码,就好像它们在工作区中一样。我不想改变代码。
答案 0 :(得分:6)
是的。使用assignin
以编程方式获取变量名称,并使用function struct2vars(s)
%STRUCT2VARS Extract values from struct fields to workspace variables
names = fieldnames(s);
for i = 1:numel(names)
assignin('caller', names{i}, s.(names{i}));
end
将它们粘贴到工作区中。
struct2vars(structWithVariables)
将该功能称为ggplot2
,现在它们已作为变量填充到您的工作区。
虽然如果您可以访问要调用的代码,那么重写它以将变量作为函数参数而不是查看当前工作区可能会更清晰。
答案 1 :(得分:0)
以下是使用cellfun
myvar=structWithVariables; %for readability of code =)
cellfun(@(x,y) assignin('base',x,y),fieldnames(myvar),struct2cell(myvar));