简体   繁体   English

错误:返回列表中未定义元素编号2

[英]error: element number 2 undefined in return list

The following function is generating an error. 以下功能产生错误。

function [retval] = select_red(train, test)
% shuffle test/data points
  shuffled_test = test(randperm(size(test, 1)), :);

  clubs     = shuffled_test(shuffled_test(:, 1) == 1, :);
  diamonds  = shuffled_test(shuffled_test(:, 1) == 2, :);
  hearts    = shuffled_test(shuffled_test(:, 1) == 3, :);
  spades    = shuffled_test(shuffled_test(:, 1) == 4, :);

  clubs = clubs(1: floor(size(clubs,1)/2),:);
  spades = spades(1: floor(size(spades,1)/2),:);

  shuffled_test = [clubs ; diamonds ; hearts ; spades];

  shuffled_test = shuffled_test(randperm(size(shuffled_test, 1)), :);

  ercf_indep = bayescls(train, shuffled_test, @pdfindep, 0.25 * ones(1,4), 0.1);
  ercf_dep = bayescls(train, shuffled_test, @pdfdep, 0.25 * ones(1,4), 0.1);
  ercf_parzen = bayescls(train, shuffled_test, @pdfparzen, 0.25 * ones(1,4), 0.1);

  retval = [ercf_indep   ercf_dep   ercf_parzen];
endfunction

Usage 用法

>> [errindep  errdep  errparzen] = select_red(train, test)
errindep =

    0.1089181   0.0029240   0.2309942

    error: element number 2 undefined in return list

Can you tell why is it generating an error message? 您能说出为什么会生成错误消息吗?

You are asking too much from the poor function. 您对功能欠佳的要求太多了。 You want three outputs and it can only deliver one (which is a vector containing three numbers). 您需要三个输出,并且只能输出一个(这是一个包含三个数字的向量)。

  • If you want the function to produce the three numbers as separate outputs, declare it as 如果希望函数将三个数字作为单独的输出产生,则将其声明为

     [ercf_indep, ercf_dep, ercf_parzen] = select_red(train, test) 

    and remove the line retval = ... at the end. 并在最后删除行retval = ...

  • If you don't want to modify the function, you need to call it with one output: 如果您不想修改该函数,则需要使用一个输出来调用它:

     out = select_red(train, test); 

    Then unpack that output into three numbers: 然后将输出解压缩为三个数字:

     ercf_indep_out = out(1) ercf_dep = out(2); ercf_parzen = out(3); 

    Or the unpacking can be done using a comma-separated list generated from a cell array: 或者可以使用从单元格数组生成的逗号分隔列表来完成解压缩:

     out_cell = num2cell(out); [ercf_indep_out, ercf_dep, ercf_parzen] = out_cell{:} 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM