Я хотел бы продвинуть функцию в пространстве имен пакета, таким образом, это может получить доступ к внутренним объектам того пакета (давайте использовать пакет статистики в качестве примера). Я попытался использовать
myfun <- function(x) print(x)
env = loadNamespace("stats")
assign("myfun", myfun , env)
Но это заблокировано. Таким образом, я попытался разблокировать свой объект
unlockBinding("myfun", env)
Так как myfun еще не существует, я не могу разблокировать его.
Какая-либо справка?
В соответствии с решением @Hadley, но используя среду пространства имен, как насчет:
environment(myfun) <- asNamespace('stats')
Почему бы просто не установить среду вашей новой функции в нужное место?
myfun <- function(x) print(x)
environment(myfun) <- as.environment("package:stats")
Вы можете получить доступ к внутренним объектам пакета, используя оператор тройного двоеточия :::::
. Посмотрите, например, на as.roman
и utils:::.roman2numeric
. (Сравните это с utils::.roman2numeric
.) Это может помочь вам избежать необходимости помещать вашу функцию в пространство имен.
Вы также можете посмотреть на dont.lockBindings
в пакете mvbutils
, который останавливает блокировку пространств имен.