Ответ 1
По линии решения @Hadley, но используя среду пространства имен, как насчет:
environment(myfun) <- asNamespace('stats')
Я хотел бы нажать функцию внутри пространства имен пакетов, чтобы он мог получить доступ к внутренним объектам этого пакета (в качестве примера можно использовать пакет статистики). Я пробовал использовать
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
, который останавливает блокирование пространств имен.