У меня есть пакет, который генерирует некоторые функции при вызове функции initialize
. Я создаю эти функции в parent.frame
initialize()
, что, я думаю, является глобальной средой. Я хочу эмулировать нормальное поведение пакета, которое позволяет вам напрямую вызывать функцию из пакета после ее загрузки, но без необходимости видеть эти функции при перечислении содержимого рабочей области с помощью ls()
. Например, делаявыставляющие функции без помех ls()
library(ggplot2)
ls()
не возвращает geom_line
, geom_point
и т.д., но вы не должны использовать ::
для вызова этих функций. Они подвергаются воздействию пользователя, но не живут в глобальной среде.
Есть ли у меня умный способ сделать то же самое для функций, генерируемых вызовом initialize
, например. определяя среды или пространства имен в zzz.r
и onLoad
или onAttach
крючками? Я думал о попытке установить среды функций в пространство имен пакетов, но кажется, что вы не можете изменить пространство имен пакетов после его загрузки.
EDIT пакет, над которым я работаю, находится здесь: https://github.com/mkoohafkan/arcpyr. Функция arcpy.initialize
подключается к Python с использованием PythonInR, импортирует пакет arcpy
, а затем создает интерфейсы для списка функций. Сегодня я попытаюсь создать упрощенный фиктивный пакет.
Конечно @ Hack-R, я редактировал свой вопрос со ссылкой. Сегодня я попытаюсь создать более простую версию. – mikeck
Имена функций, начинающиеся с '.', Не будут отображаться с помощью 'ls()'. Не совсем «умный» и не очень безопасный, если другие пакеты используют один и тот же трюк. – Eric
Зачем вам нужно динамически создавать эти функции? Почему бы им не существовать в пространстве имен вашего пакета, но попросите их выбросить ошибку, если Python еще не инициализирован? – shadowtalker