Подтвердить что ты не робот

Пример входных данных с примером вывода с использованием относительного пути в виньетке пакета R?

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

Я читал об использовании данных примера в сообщении Хэдли Уикхэма (http://r-pkgs.had.co.nz/data.html), и считаю, что я должен хранить данные моего примера как сырые данные, поскольку он должен быть проанализирован для генерации вывода.

Итак, я создал каталог в моей структуре пакета

/Users/userName/myPackage/inst/extdata/

с подкаталогами InputFiles и OutputFiles.

И я помещаю пример файла (exampleData.csv) внутри подкаталога InputFiles (/Users/userName/myPackage/inst/extdata/InputFiles).

Моя виньетка расположена в:

/Users/userName/myPackage/vignettes/myPackage.Rnw

Он содержит следующий синтаксис:

<<eval=FALSE>>=
fileString = "/Users/userName/myPackage/inst/extdata/InputFiles/exampleData.csv"
doFunction1(fileString)
doFunction2(fileString)
doFunction3(fileString, output ="Users/userName/myPackage/inst/extdata/OutputFiles")
@

У меня возникают две проблемы с разработкой этой виньетки и ее примерных наборов данных:

1) Я не уверен, подходит ли мое использование файла extdata. Это, по-видимому, лучшее имя и местоположение каталога для размещения моих файлов примеров в соответствии с вышеупомянутой ссылкой Хэдли Уикхема.

2) Я не уверен, как сделать пути относительными, а не абсолютными, поскольку у меня есть их в настоящее время. Этот примерный код не запускается автоматически, как вы можете видеть. Вместо этого я использую его под фрагментом R eval = FALSE, чтобы он просто был указан там, чтобы пользователи могли сами себя протестировать. После запуска кода примера пользователи также могут проверить, действительно ли был создан выходной файл (/Users/userName/myPackage/inst/extdata/OutputFiles). Каков наилучший способ для меня позволить пользователю не использовать абсолютный путь, следуя примеру? Можно ли просто следовать относительному пути из каталога пакетов myPackage?

Мои файлы данных состоят из файлов .csv,.htm и .text. В прошлом при создании пакета я сохранил фрейм данных как файл .rda, а затем пользователь мог просто использовать:

data(example.rda)

чтобы прочитать этот файл. Им не пришлось бы писать весь путь. Есть ли аналогичная функция, которая может использоваться для чтения файлов .csv,.html и .text, а затем выводить их в примерное местоположение вывода - без использования полного пути? Можно ли иметь вспомогательные функции, которые также читаются во входных файлах и записываются в выходные файлы? Повлияет ли это на конфликт в CRAN, если различные справочные функции в папке /man физически сохраняют выходной файл примера в примерную папку вывода?

4b9b3361

Ответ 1

Стандартный способ обращения к файлу в пакете:

# gives root package directory
system.file(package="myPackage") 

# specific file
system.file("extdata/InputFiles/exampleData.csv", package="myPackage") 

# best is to use cross-platform way to write a file path:
system.file("extdata", "InputFiles", "exampleData.csv", package="myPackage") 

При разработке с devtools подкаталог inst игнорируется, поэтому вам не нужно беспокоиться об абсолютных путях. Это должно работать в виньетке. Обратите внимание, что виньетка, я думаю, только когда-либо использует установленную версию пакета, а не ту, которую вы, возможно, загрузили в среду разработки (в частности, devtools::load_all() не меняет код, который используется для создания виньетки, вы должны install() сначала).

Наконец, использование data() немного устарело. Хэдли и другие рекомендуют использовать ленивые данные, поэтому данные появляются в пространстве имен автоматически. Попробуйте следующее в DESCRIPTION.

LazyData: true
LazyDataCompression: xz