5

我们有一个 matlab 函数 nanstd.m 的遗留定义,它在很多函数中被调用。

旧版本的定义如下:

function y = nanstd(x, dim);

上述定义存储在我们的本地服务器驱动器“H\Util\Functions”上。

较新版本的 matlab 有一个不同的定义,即:

function y = nanstd(fts, varargin)

以上翻译为:

Y = nanstd(X,flag,dim)

以上存储在“C\Program Files\Matlab”下。

我们需要两个版本都可用。是否有可能我可以编写一个代码,如果有 2 个参数输入使用 nanstd.m 在“H\Util\Functions”,如果有 3 个输入使用 nanstd.m 在“C\Program Files\Matlab” .

谢谢

4

3 回答 3

7

由于您的旧版定义应该在您的路径上的内置版本之前,您可以简单地将以下内容添加到您的自定义 nanstd,使其行为如下:

function y = nanstd(x,varargin)

if nargin > 2
    wd = cd(fullfile(matlabroot,'toolbox','stats','stats'));
    y = nanstd(x,varargin{:});
    cd(wd)
    return
elseif nargin == 2
    flag = varargin{1};
end

%// ... continue custom nanstd function

根据有关 MatlabCentral 的讨论,运行阴影函数的唯一方法是更改​​其目录。令人惊讶的是,路径有利于当前目录到当前函数——这让我感到惊讶——但这对这种情况是有益的。这使您可以简单地修改您的自定义遗留 nanstd 函数以退出内置定义。

nanstd编辑:您可能希望使用 a包装对 stats 的调用,try/catch以便您的目录始终被恢复,即使在出现错误的情况下也是如此。

于 2013-10-04T14:49:17.263 回答
3

推荐的方法

这可能是我会做的方式(如果我不想在未来搞得一团糟)。

找到所有旧文件,并替换nanstd(nanstdold(,这可以通过多种方式实现自动化。

(如果你真的有变量命名nanstd,你当然会感到痛苦)

然后,为了安全起见,如下定义您的函数:

function y = nanstdold(fts, varargin)

if nargin = 2
   y = nanstd(fts,[],varargin)
else
   y = nanstd(fts,varargin)
end

您可能需要调整对 的第一次调用nanstd,但我认为这种思路应该能让您到达那里。

确保烧录nanstd只接受 2 个输入参数的函数,以免意外引用它。

于 2013-10-04T14:43:08.713 回答
1

替代方法

如果您有信心,您可以尝试设计一个替换规则来自动更新所有旧文件而不引入新功能。开始的东西:

查找所有出现的

nanstd( + something+ comma that is not between {} or () 

并将它们替换为

nanstd( + something+ comma + flag argument + comma

特别是对于这个,您需要先备份您的文件!

于 2013-10-04T15:07:49.357 回答