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 it.
Any help ?
Solution 1:
Along the line of @Hadley's solution, but using the environment of the namespace, how about:
environment(myfun) <- asNamespace('stats')
Solution 2:
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")
Solution 3:
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.