Как определить, какие переменные или функции из пакета экспортируются

В моем пакете R используется внутренняя переменная x. Если я загружаю пакет (я пытался использовать только devtools::load_all), то x не отображается в списке ls(), но имеет значение. Как я могу этого избежать?

Меня устраивает, что пользователь может получить доступ к переменной с помощью myPackage::x, но не просто x.


person Andreas    schedule 18.11.2012    source источник


Ответы (2)


Функция load_all имеет аргумент export_all.

От ?load_all

Если TRUE (по умолчанию), экспортировать все объекты. Если FALSE, экспортировать только те объекты, которые указаны как экспортируемые в файле NAMESPACE.

Итак, попробуйте использовать export_all=FALSE в вызове load_all.

person GSee    schedule 18.11.2012

Сначала попробуйте собрать пакет и проверьте, сохраняется ли проблема. Экспорт из пакета определяется в файле NAMESPACE. При использовании devtools::load_all пространство имен не загружается (см. здесь). Подробнее об этом и сборке пакета читайте в руководстве Writing R расширения.

Возможно, вы используете шаблон экспорта по умолчанию в файле NAMESPACE. Проверьте его в своем пакете, и если он выглядит так:

exportPattern("^[^\\.]")

затем пакет экспортирует из пространства имен все, что не начинается с точки. Так что вы либо называете это .x, либо меняете exportPattern(), например...

export(myfun1, myfun2) 

для экспорта функций myfun1 и myfun2 из пакета. Явно определяя, что вы хотите экспортировать, вы избегаете того, чтобы что-то было доступно, когда в этом нет необходимости.

person Joris Meys    schedule 18.11.2012
comment
Мой файл пространства имен просто export(f,g) - person Andreas; 18.11.2012
comment
Попробуйте сначала собрать пакет и убедитесь, что вы правильно указали экспорт в пространстве имен. См. также мою правку. - person Joris Meys; 18.11.2012
comment
Я понимаю. Есть ли способ избежать создания и установки пакета каждый раз, когда я вношу изменения? Я тестирую его с помощью source("test.R"), и сборка-установка до этого немного неуклюжа. - person Andreas; 18.11.2012
comment
вам не нужно собирать пакет для каждого теста, но если вы хотите проверить, все ли экспортируется так, как вы хотите, вы должны установить его. В противном случае файл пространства имен не читается. Но это то, что я делаю полностью в конце, когда уверен, что все остальное работает как задумано. - person Joris Meys; 18.11.2012
comment
Андреас, вы продолжаете спрашивать о сборке пакета и как бы сыпали предложениями по использованию Rstudio. Я обещаю, что это сильно упростит вашу жизнь. Существуют инструменты разработки пакетов, которые делают многое из того, что вы просите. Также могу я предложить пойти в git hub и найти там чей-нибудь пакет, которому вы доверяете (например, я доверяю Хэдли Уикхэму) и посмотреть, как они это сделали. - person Tyler Rinker; 18.11.2012
comment
@TylerRinker Спасибо за заботу. Иногда я могу быть немного упрямым в использовании самых фундаментальных инструментов. Я проверю Rstudio. - person Andreas; 18.11.2012