Matlab:如何删除不存在的字段的错误

时间:2012-11-25 12:34:47

标签: matlab

运行matlab代码时出错。在这里,我尝试使用以前代码的一个输出作为我的新代码的输入。

??? Reference to non-existent field 'y1'.

任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分:3)

一个好的做法可能是在访问之前检查字段是否存在:

if isfield( s, 'y1' )
    % s.y1 exists - you may access it
    s.y1
else
    % s.y1 does not exist - what are you going to do about it?
end

考虑到Edric的评论,另一种可能的方式是

try 
    % access y1
    s.y1
catch em
    % verify that the error indeed stems from non-existant field
    if strcmp(em.identifier, 'MATLAB:nonExistentField')
         fprintf(1, 'field y1 does not exist...\n');
    else
         throw( em ); % different error - handle by caller?
    end
end

答案 1 :(得分:1)

您是否使用加载命令从文件加载数据? 如果是,这个函数会覆盖你当前的变量,因此,它们变得不存在,所以当你调用时,它不是使用:

load ('filename');

使用:

f=load ('filename');

现在,要引用加载文件中的任何变量,请使用f.varname,for 例如,如果在加载的数据中保存了一个名为net的网络,您可以使用它:

a = f.net(fv);

答案 2 :(得分:0)

我先解释一下我的情况然后给出解决方案。

  • 我首先保存变量op,它是 struct ,其名称为coef.mat;
  • 我使用coef = load( file_path, '-mat');
  • 加载此变量
  • 在新功能中,我将变量coef作为参数传递给它,此时会弹出错误引用不存在的字段

我的解决方案:

  • 只需将coef替换为coef.op,然后将其传递给该函数即可。

所以,我认为背后的原因是:当你使用load并希望访问原始变量时, struct 被保存为变量,您需要使用dot(.)操作直接指出它,您可以直接在Matlab工作区中打开变量并找出它在变量中包含的内容。

在您的情况下,如果您的以前代码的输出是一个结构(这是我的猜测,但您没有指出)并且您将其保存为{{ 1}},您将其加载为MyStruct然后将其用作函数的参数时,它应 MyInput = load(MyStruct)

啤酒花它会起作用!

答案 3 :(得分:0)

首先将其加载到命令窗口并观察工作区窗口。您可以看到结构名称。通过访问结构名称,它可以工作。示例:

lm=load('data.mat');
disp(lm.SAMPLE.X);

这里SAMPLE是结构名称,X是该结构的成员