将对象添加到包命名空间

时间:2010-06-22 14:40:54

标签: r r-package

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

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

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

unlockBinding("myfun", env)

由于myfun尚未存在,我无法解锁。

任何帮助?

3 个答案:

答案 0 :(得分:35)

沿着@Hadley的解决方案,但使用命名空间的环境,如何:

environment(myfun) <- asNamespace('stats')

答案 1 :(得分:19)

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

myfun <- function(x) print(x)
environment(myfun) <- as.environment("package:stats")

答案 2 :(得分:7)

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

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