Подтвердить что ты не робот

Добавление объектов в пространство имен пакетов

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

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

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

unlockBinding("myfun", env)

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

Любая помощь?

4b9b3361

Ответ 1

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

environment(myfun) <- asNamespace('stats')

Ответ 2

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

myfun <- function(x) print(x)
environment(myfun) <- as.environment("package:stats")

Ответ 3

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

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