代码之家  ›  专栏  ›  技术社区  ›  AmericanMade

倍频程中的deal函数不工作

  •  3
  • AmericanMade  · 技术社区  · 8 年前

    我有一个。m文件,在Matlab中运行时编写(并运行),但在倍频程中运行时,出现了一个错误。我知道这两个程序有不同之处,我只是不知道如何重新编写有问题的代码行以使其正常工作。

    这是代码。最后一行是导致问题的原因:

    dirr = '/my/file/path/'
    foldlist = dir([dirr '*.wav']);
    foldname={};
    [foldname{1:length(foldlist),1}] = deal(foldlist.name)
    

    下面是运行时出现的错误:

    error: Invalid call to deal.  Correct usage is:
    -- Function File: [R1, R2, ..., RN] = deal (A)
    -- Function File: [R1, R2, ..., RN] = deal (A1, A2, ..., AN)
    

    看起来很简单,给出了错误的解释,我只是不知道如何重写它。

    1 回复  |  直到 8 年前
        1
  •  5
  •   Cris Luengo    8 年前

    您应该能够做到这一点:

    foldname={foldlist.name};
    

    这也是MATLAB中更好的方法。

    foldlist.name 是以逗号分隔的值列表。通过在单元格数组周围放置花括号,可以在单元格数组中捕获这些元素。相当于 {a,b,c} 。

    原始代码的问题是,初始化之后 foldname={} ,索引 foldname{1:length(foldlist),1} 是非法的。当索引超出赋值左侧的界限时,MATLAB倾向于添加空单元格。Octave也可以,但这里索引数组周围有方括号,Octave似乎没有以相同的方式解析这个特定位。