Создание пакета data.frame для R

Я делаю пакет R, и мне нужно отслеживать файлы, открытые с помощью функций пакета.

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

У меня была идея создать data.frame в настройках options внутри вызова .onLoad (аналогично тому, что делает Хэдли в своем пакете devtools здесь), но список открытых файлов на самом деле не является настраиваемой "опцией" в моем пакете. Есть ли другой способ?


person ialm    schedule 23.03.2015    source источник
comment
Когда вы настраиваете пакет, вы должны указать объекты для экспорта, верно? Можете ли вы просто исключить фрейм данных из этого списка?   -  person Alex A.    schedule 23.03.2015
comment
@АлексА. Такая простая и гениальная идея. Я думаю, что это сработает - позвольте мне дать вихрь   -  person ialm    schedule 23.03.2015
comment
@АлексА. Я думаю, что ваш комментарий указал мне правильное направление. Теперь у меня возникли проблемы с областью действия (т.е. изменения не сохраняются после изменения инициализированного data.frame). Вы можете написать свой комментарий в качестве ответа, и я приму его.   -  person ialm    schedule 24.03.2015
comment
Я очень рад, что смог помочь вам на правильном пути, но мне жаль слышать, что это не помогло вам полностью. Я беспокоюсь, что проблемы с областью действия связаны с тем, что фрейм данных не экспортируется... :\   -  person Alex A.    schedule 24.03.2015
comment
Мне нравится devtools::use_data(..., internal = TRUE). Это создает sysdata.rda в файле R и, таким образом, выполняется при загрузке пакета.   -  person Rich Scriven    schedule 24.03.2015


Ответы (1)


Когда вы создаете пакет R, если вы не экспортируете все объекты, вы должны указать, какие объекты экспортируются в файле NAMESPACE. Если вам нужно сохранить фрейм данных в вашем пакете, но вы не хотите, чтобы он был доступен пользователю, вы можете не экспортировать его, исключив его из списка.

person Alex A.    schedule 23.03.2015