Добавьте объекты упаковать пространство имен

Я хотел бы продвинуть функцию в пространстве имен пакета, таким образом, это может получить доступ к внутренним объектам того пакета (давайте использовать пакет статистики в качестве примера). Я попытался использовать

myfun <- function(x) print(x)
env = loadNamespace("stats")
assign("myfun", myfun , env)

Но это заблокировано. Таким образом, я попытался разблокировать свой объект

unlockBinding("myfun", env)

Так как myfun еще не существует, я не могу разблокировать его.

Какая-либо справка?

35
задан bartektartanus 11 January 2015 в 09:42
поделиться

3 ответа

В соответствии с решением @Hadley, но используя среду пространства имен, как насчет:

environment(myfun) <- asNamespace('stats')
35
ответ дан 27 November 2019 в 07:08
поделиться

Почему бы просто не установить среду вашей новой функции в нужное место?

myfun <- function(x) print(x)
environment(myfun) <- as.environment("package:stats")
19
ответ дан 27 November 2019 в 07:08
поделиться

Вы можете получить доступ к внутренним объектам пакета, используя оператор тройного двоеточия :::::. Посмотрите, например, на as.roman и utils:::.roman2numeric. (Сравните это с utils::.roman2numeric.) Это может помочь вам избежать необходимости помещать вашу функцию в пространство имен.

Вы также можете посмотреть на dont.lockBindings в пакете mvbutils, который останавливает блокировку пространств имен.

6
ответ дан 27 November 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: