2015-01-09 5 views
2

В настоящее время я создаю свой первый пакет R, и я запутался в способе обработки текстовых данных. Я хорошо понял, что набор данных должен быть помещен в подкаталог ./data, сохранен в один из форматов .rda, .txt или .csv, а затем может быть загружен функцией data().Создание пакета R: путают о том, как обрабатывать текстовые данные

Однако функция data() такая же, как функция read.table(), то есть она читает текстовый файл (.txt или .csv) и загружает его в файл data.frame. Это не то, что я хочу: я просто хочу получить доступ к текстовому файлу (.txt или .csv) и загрузить его с помощью собственной функции чтения, которую я разработал в своем исходном коде R пакета. (это специальная функция чтения со специальными проверками в зависимости от того, что ожидает пакет).

После прочтения много вопросов в Интернете, я нашел функцию system.file() полезно и использовать его таким образом, в моем тестовом файле:

current_dir=system.file(package="MYPACKAGE") 
myTextFile=paste(current_dir,"/data/myTextFile.csv",sep="") 
# Then I use my own function to load it: 
myOwnReadingFunction(myTextFile) 

Это работало отлично, и мой R CMD check прошло хорошо .... пока я не следовать советованию журнала R CMD check:

«Примечание: значительно лучше сжатие может быть получено с помощью R CMD построить --resave-данные»

Tiping R CMD build --resave-data до R CMD check переносит мои файлы .csv в .csv.bz2 и .csv.xz! Так что то, что я написал в своем тестовом файле (см. Выше), теперь не работает.

Конечно, я думаю, я мог бы, например, изменить его:

myTextFile=paste(current_dir,"/data/myTextFile.csv.bz2",sep="") 

Но я действительно интересно, если это хороший способ для обработки текстовых файлов в пакете R. Мне это кажется немного «сложным». Является ли это «хорошей практикой»? Не является ли другим способом простого доступа к текстовым файлам без его загрузки? У кого-то уже была такая же ситуация?

Бонус вопрос: почему не R CMD build --resave data использовать то же сжатие для моих двух CSV-файлов? (То есть: .bz2 и .xz)

+0

Я не думаю, что вы можете сжать файл и сохранить его как необработанный текст. Также обратите внимание, что вы получаете «Примечание», а не «предупреждение» или «ошибка» ... –

+0

На самом деле, у меня также есть некоторые .rda-файлы в моем ./data подкаталоге. Возможно, вы правы, и примечание может быть только для этих файлов .rda, но как выбрать файлы, которые будут затронуты параметром --resave-data? Более того, хотя предложение начинается со слова «Примечание», оно отображается как ПРЕДУПРЕЖДЕНИЕ: * проверка данных для ASCII и несжатых сохраняет ... ПРЕДУПРЕЖДЕНИЕ – Totoro

ответ

3

Datasets вы размещаете в папке data будут доступны пользователю через функцию data(), которая предназначена только для загрузки данных с load() или read.table(). Если вы хотите включить другие нестандартные файлы в пакет R, поместите их в каталог inst, и они будут отображаться в корневом каталоге вашего пакета после его установки и извлечения с помощью system.file().

Другими словами, ваша структура каталогов должна выглядеть перед упаковкой и проверки:

MyPackage/data 
MyPackage/inst/extdata <-- Your data 
MyPackage/man 
MyPackage/R 
... 

и как это после установки

MyPackage/data 
MyPackage/extdata <-- Your data 
MyPackage/man 
MyPackage/R 
... 

Ваши файлы теперь можно получить доступ таким образом:

system.file("extdata", "myTextFile.csv", package="MyPackage") 

Для примера этого решения рассмотрите пакет EBImage, который содержит несколько нестандартных файлов в виде изображений. Как и текстовые файлы, они не могут быть загружены с data(), так что вместо

system.file("images", "lena-color.png", package="EBImage") 

используется в примерах ?readImage и подобных.

+0

Большое спасибо Backlin! Это показалось мне хорошей идеей, я просто попробовал, с надеждой, но опять-таки проблема ... При выполнении 'R CMD check', он создает каталог MyPackage.Rcheck? В этом каталоге больше нет подкаталога «тексты», который я создал. Так что, когда я ищу свои сырые файлы с 'system.file()', он терпит неудачу ... В MyPackage.Rcheck я вижу только данные, help, html, meta и R. – Totoro

+0

Это странно, он отлично работает для меня. Я создаю его, прежде чем проверять его, поэтому попробуйте и посмотрите, работает ли это. Я вижу каталог 'texts' как в' MyPackage_X-X-X.tar.gz', так и в 'MyPackage.Rcheck/00_pkg_src/MyPackage'. – Backlin

+0

Обнаружили ошибку, @Totoro. Попробуйте обновленный ответ. – Backlin

Смежные вопросы