问题
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 ?
回答1:
Along the line of @Hadley's solution, but using the environment of the namespace, how about:
environment(myfun) <- asNamespace('stats')
回答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")
回答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.
来源:https://stackoverflow.com/questions/3094232/add-objects-to-package-namespace