Inst и extdata в R Packaging
В документации R предполагает, что необработанные файлы данных (а не Rdata или Rda) должны быть помещены в inst/extdata/
Из первого абзаца в: http://cran.r-project.org/doc/manuals/R-exts.html#Data-in-packages
Подкаталог данных предназначен для файлов данных, которые должны быть доступны через ленивую загрузку или для загрузки с использованием данных(). (Выбор сделан поле "LazyData" в файле DESCRIPTION: по умолчанию не нужно делать поэтому.) Он не должен использоваться для других файлов данных, необходимых для пакета, и соглашение выросло, чтобы использовать каталог inst/extdata для таких файлы.
Итак, я переместил все свои исходные данные в эту папку, но когда я создаю и перезагружаю пакет, а затем пытаюсь получить доступ к данным в функции с (например):
read.csv(file=paste(path.package("my_package"),"/inst/extdata/my_raw_data.csv",sep=""))
# .path.package is now path.package in R 3.0+
Я получаю ошибку "не могу открыть файл".
Однако, похоже, что существует папка с именем /extdata
в каталоге пакета с файлами в ней (после сборки и установки). Что происходит с папкой /inst
?
Все ли в папке /inst вставляется в /
пакета?
Ответы
Ответ 1
Вы были очень близки и по существу имели это. Формальная ссылка из "Написание R-расширений":
1.1.3 Папки подкаталогов
[...]
Содержимое подкаталога inst
будет скопировано рекурсивно в каталог установки. Подкаталоги inst
не должны помешать тем, которые используются R (в настоящее время R
, data
, demo
, exec
, libs
, man
, help
, html
и Meta
и более ранних версиях используется latex
, R-ex
). Копирование inst
происходит после src
, поэтому его Makefile
может создавать файлы для установки. До R 2.12.2, файлы были установлены на платформах POSIX с разрешениями в источниках пакетов, поэтому следует соблюдать осторожность, чтобы обеспечить они не слишком ограничительны: R CMD build
сделает подходящий Корректировки. Чтобы исключить установленные файлы, можно указать список исключаемых шаблонов в файле .Rinstignore
на верхнем уровне исходный каталог. Эти шаблоны должны быть Perl-подобными регулярными (см. справку regexp
в R для точных деталей), по одной на линию, для соответствия (10) по пути файла и каталога, например doc/.*[.]png$
исключает все PNG файлы в inst/doc
на основе (нижний регистр).
Ответ 2
Более полезным, чем использование file.path
, было бы использовать system.file
. Как только ваш пакет установлен, вы можете захватить свой файл следующим образом:
fpath <- system.file("extdata", "my_raw_data.csv", package="my_package")
fpath
теперь будет иметь абсолютный путь на вашем HD в файл.