开发者

Add objects to package namespace

I'd like to push a function inside a package namespace so it can access internal objects of that package (let's use stats package as an example). I've tried using

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

But it is locked. So I've tried to unlock my object

unlockBinding("myfun", env)

Since myfun doesn't exist yet, I can't unlock开发者_Python百科 it.

Any help ?


Along the line of @Hadley's solution, but using the environment of the namespace, how about:

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


Why not just set the environment of your new function to the right place?

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


You can access internal objects of a package using the triple colon operator :::. Take a look at, for example, as.roman and utils:::.roman2numeric. (Compare this to utils::.roman2numeric.) This could help you avoid having to put your function inside the namespace.

You might also want to look at dont.lockBindings in the mvbutils package, which stops namespaces being locked.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜