在MATLAB中分配函数输出的问题

时间:2013-09-23 16:14:02

标签: matlab bioinformatics

当我尝试将rmabackadj函数的输出存储到变量时,我遇到了问题。没有分配输出变量时,该功能正常工作。此功能是生物信息学工具箱的一部分。

所以问题是,当我尝试运行以下内容时,它可以正常运行:

rmabackadj(myprobeData.PMIntensities)

但是当我尝试运行以下内容时出现错误:

>> A = rmabackadj(myprobeData.PMIntensities)
Warning: Colon operands must be real scalars. 
> In rmabackadj>findMaxDensity at 255
  In rmabackadj at 164 
Error using ksdensity>parse_args (line 162)
X must be a non-empty vector.
Error in ksdensity (line 114)
[axarg,yData,n,ymin,ymax,xispecified,xi,u,m,kernelname,...
Error in rmabackadj>findMaxDensity (line 255)
[f, x] = ksdensity(z,  min(z):(max(z)-min(z))/npoints:max(z), 'kernel', 'epanechnikov');
Error in rmabackadj (line 164)
            mu = findMaxDensity( o(o < mu));

我也在网上搜索,但我找不到任何结果。有没有人知道这个错误的原因?

PS:当我将ans变量分配给新变量时,它被正确分配。

A = ans

2 个答案:

答案 0 :(得分:1)

我很确定这是一个错误。

首先,它仅在您提供输出参数时出错的原因是因为函数中有一个内部开关,它根据nargout计算不同的内容。这是一个奇怪的设计,但不一定是一个错误。

rmabackadj的内部有两个子功能findMaxDensityfindMaxDensity2。主例程调用findMaxDensity,它应该找到参数mu的初始猜测。但是(当我运行你在评论中提到的文档示例时),它会在边缘发现一个可怕的猜测,导致错误。

当我编辑文件以调用findMaxDensity2而不是findMaxDensity时,它似乎产生了合理的猜测,并且运行正常且没有错误。我不能保证猜测是否实际上是“正确的”,但这对我来说似乎是合理的,并且它只是作为一个初始猜测开始一个更好的估计过程。 (注意,如果您自己这样做,请务必先保存旧版本的副本。)

我猜这是一个错误,要么findMaxdensity产生一个应该被捕获的异常糟糕的猜测,要么真的它应该调用findMaxDensity2并且代码还没有更新到召唤一个新的子功能。

无论哪种方式,我都会report它到MathWorks。

PS我正在运行MATLAB R2011b。在较新版本中,首先检查问题是否已得到解决,或行为有所不同。

答案 1 :(得分:0)

Mathworks确认了这个错误并为此发布了一个解决方案,并提到这可能会在将来的版本中修复。

一种可能的解决方法是在rmabackadj函数

的第163行添加以下条件
% estimate mu from left-of-the-mode data
  if any(o < mu)
     mu = findMaxDensity( o(o < mu));
  end

N&lt; 1000样本的错误也已得到确认,但尚未发布任何解决方法。

如果解决了N&lt; 1000 samples bug的问题,我会更新线程。