38

我想在包命名空间中推送一个函数,以便它可以访问该包的内部对象(让我们以 stats 包为例)。我试过使用

myfun <- function(x) print(x)
env = loadNamespace("stats")
assign("myfun", myfun , env)

但是它被锁定了。所以我试图解锁我的对象

unlockBinding("myfun", env)

由于 myfun 还不存在,我无法解锁它。

有什么帮助吗?

4

3 回答 3

38

沿着@Hadley的解决方案,但是使用命名空间的环境,怎么样:

environment(myfun) <- asNamespace('stats')
于 2010-08-04T02:25:11.430 回答
19

为什么不将新功能的环境设置到正确的位置?

myfun <- function(x) print(x)
environment(myfun) <- as.environment("package:stats")
于 2010-06-22T21:43:47.510 回答
6

您可以使用三重冒号运算符访问包的内部对象:::。看看,例如,as.romanutils:::.roman2numeric。(将此与 进行比较utils::.roman2numeric。)这​​可以帮助您避免将函数放在命名空间内。

您可能还想查看包dont.lockBindings中的mvbutils内容,它会阻止名称空间被锁定。

于 2010-06-22T14:46:57.600 回答