Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中分配函数输出的问题_Matlab_Bioinformatics - Fatal编程技术网

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

在MATLAB中分配函数输出的问题,matlab,bioinformatics,Matlab,Bioinformatics,当我试图将rmabackadj函数的输出存储到变量时,我遇到了问题。未指定输出变量时,该函数正常工作。此函数是生物信息学工具箱的一部分 所以问题是,当我尝试运行以下程序时,它会正常工作: rmabackadj(myprobeData.PMIntensities) 但是,当我尝试运行以下操作时,会出现错误: >> A = rmabackadj(myprobeData.PMIntensities) Warning: Colon operands must be real scalars

当我试图将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));

我很确定这是个错误

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

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

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

我猜这是一个bug,要么是
findMaxdensity
生成了一个异常糟糕的猜测,应该被捕获,要么它真的应该调用
findMaxDensity2
,并且代码没有被更新以调用新的子函数

不管怎样,我都会把它交给MathWorks


PS我正在运行MatlabR2011B。首先检查该问题是否已在较新版本中修复,或行为是否有所不同。

Mathworks确认了此错误,并发布了解决方案,并提到此问题可能会在未来版本中修复

一种可能的解决方法是在
rmabackadj
函数的第163行添加以下条件

% estimate mu from left-of-the-mode data
  if any(o < mu)
     mu = findMaxDensity( o(o < mu));
  end
%从模式数据左侧估计mu
如果有(o

NMinor技术性缺陷:
rmabackadj
不是内置的,它是生物信息学工具箱的一部分。您正在运行什么版本的生物信息学工具箱?从中,您似乎可以分配一个输出参数。当您尝试使用给定的示例时,是否也会出现相同的问题?如果出现错误,请尝试使用
dbstop运行它
,以查看是否可以得到任何关于它为什么会阻塞的提示,并验证所使用的函数是否没有因您自己制作的东西而过载。最后,首先清除
A
是否有帮助?
myprobeData。PMIntensities
是由
celintensityread
函数生成的探针强度值数组。问题现在也发布在这里:您完全正确。当您试图用少于1000个样本调用函数时,
rmabackadj
函数也会失败。在
rmabackadj
中有一个检查N的子句
% estimate mu from left-of-the-mode data
  if any(o < mu)
     mu = findMaxDensity( o(o < mu));
  end