2

是否可以包装 R 函数来修改其功能?

这是一个玩具示例来解释我的意思。考虑这个函数sum2

 sum2 <- function (x) if (length(x) == 1) { cat(x); sum(x) } else sum(x)

它做了什么sum,只做了微小的修改。假设我想重新定义sum自己来做sum2这里的事情。在不了解我要包装的函数的内部结构的情况下,如何以一般方式执行此操作?

我想这样做是为了临时“修复”一个包功能,而不必修改和重新安装包。我想检查它的输入并返回一个特殊值,以防输入满足某些条件。

(对于那些对 Mathematica 非常熟悉的人,我正在寻找类似于Gayley-Villegas 技巧的东西。)

4

2 回答 2

5

你需要小心这个。所有包现在都有命名空间,并将调用同一命名空间中的其他函数。当您从主命令提示符调用函数时,您的方法可能会起作用。但是包中的函数会调用原来的函数,而不是你的修改。

查看帮助assignInNamespace和相关函数以了解在命名空间中进行更改的方法。trace函数是另一种就地修改函数的方法,在现有函数中添加一些额外的代码。

于 2013-05-11T04:12:36.793 回答
-1

这些方面的一些东西已经奏效了:

sum2 <- sum
sum <- function (x) if (length(x) == 1) { cat(x); sum2(x) } else sum2(x)

我没有意识到我可以只存储 in 的原始定义,sum这样sum2我就可以从 redefined 中调用它sum

正如 Matthew 指出的那样sum,当它被称为 时,它不会被覆盖base::sum

于 2013-05-11T03:23:08.837 回答