Q:

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 ?

A:

Along the line of @Hadley's solution, but using the environment of the namespace, how about:
environment(myfun) <- asNamespace('stats')

A:

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")

A:

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.

