我想在一个包命名空间中推送一个函数,以便它可以访问该包的内部对象(让我们使用stats包作为例子).我试过用了
myfun <- function(x) print(x)
env = loadNamespace("stats")
assign("myfun", myfun , env)
Run Code Online (Sandbox Code Playgroud)
但它被锁定了.所以我试图解锁我的对象
unlockBinding("myfun", env)
Run Code Online (Sandbox Code Playgroud)
由于myfun尚不存在,我无法解锁.
有帮助吗?
小智 35
沿着@Hadley的解决方案,但使用命名空间的环境,如何:
environment(myfun) <- asNamespace('stats')
Run Code Online (Sandbox Code Playgroud)
had*_*ley 19
为什么不将新功能的环境设置到正确的位置?
myfun <- function(x) print(x)
environment(myfun) <- as.environment("package:stats")
Run Code Online (Sandbox Code Playgroud)
您可以使用三重冒号运算符访问包的内部对象:::.例如,看看as.roman和utils:::.roman2numeric.(比较一下utils::.roman2numeric.)这可以帮助您避免将函数放在命名空间中.
您可能还希望dont.lockBindings在mvbutils包中查看,这会阻止名称空间被锁定.
| 归档时间: |
|
| 查看次数: |
10636 次 |
| 最近记录: |