是否可以包装R函数来修改其功能?
这是一个玩具示例来解释我的意思。考虑这个函数sum2
:
sum2 <- function (x) if (length(x) == 1) { cat(x); sum(x) } else sum(x)
它通过微小的修改来完成sum
所做的事情。假设我想重新定义 sum
本身以执行sum2
在此处执行的操作。我怎么能以一般的方式做到这一点,却不知道我正在包装的函数的内部结构?
我想这样做暂时“修复”一个包函数,而不必修改和重新安装包。我想检查它的输入并返回一个特殊值,以防输入满足某些条件。
(对于那些对Mathematica非常熟悉的人,我正在寻找与Gayley-Villegas trick类似的东西。)
答案 0 :(得分:5)
你需要小心这一点。所有包现在都有Namespaces,并将调用同一名称空间中的其他函数。从主命令提示符调用函数时,您的方法可能会起作用。但是包中的函数将调用原始函数,而不是您的修改。
查看assignInNamespace
及相关函数的帮助,了解如何在命名空间中进行更改。 trace
函数是另一种修改函数的方法,为现有函数添加了一些额外的代码。
答案 1 :(得分:-1)
这些方面的某些方面有效:
sum2 <- sum
sum <- function (x) if (length(x) == 1) { cat(x); sum2(x) } else sum2(x)
我没有意识到的是,我可以将sum
的原始定义存储在sum2
中,以便我可以从重新定义的sum
中调用它。
正如Matthew所说,当sum
被称为base::sum
时,这不会覆盖{{1}}。