Как я могу документировать наборы данных с помощью roxygen?

Можно ли включить файлы .R в каталог данных моего пакета в процессе roxygen?

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


person Karsten W.    schedule 22.02.2010    source источник


Ответы (3)


Roxygen можно использовать в любом месте R-файла (другими словами, за ним не обязательно должна следовать функция). Его также можно использовать для документирования любого docType в документации R.

Таким образом, вы можете просто задокументировать свои данные в отдельном блоке (примерно так):

#' This is data to be included in my package
#'
#' @name data-name
#' @docType data
#' @author My Name \email{blahblah@@roxygen.org}
#' @references \url{data_blah.com}
#' @keywords data
NULL
person Shane    schedule 22.02.2010
comment
За исключением того, что вам лучше использовать NULL вместо roxygen(), чтобы вы не вызывали зависимость времени выполнения от roxygen - person hadley; 22.02.2010
comment
@hadley: было бы неплохо добавить такой пример в виньетку roxygen и сделать акцент на зависимости от roxygen? Я обнаружил, что это немного сбивает с толку с точки зрения того, как структурировать файлы. - person Shane; 22.02.2010
comment
Спасибо и Шейну, и Хэдли за отличную помощь. Теперь я намного яснее понимаю, как пользоваться roxygen; и теперь R CMD check больше не жалуется. Остается один вопрос: нужно ли мне помещать документацию с данными в подкаталог R? Было бы неплохо научить roxygenize тоже заглядывать в каталог данных ... - person Karsten W.; 22.02.2010
comment
@Karsten: Я склонен думать, что единственное, что должно быть в подкаталоге data, - это данные. Roxygen предоставляет грамотное программирование в виде кода R, поэтому мне нравится, чтобы все это было в моих файлах R. Но помимо этого вы можете попробовать следующее: roxygenize использует переменную окружения R.DIR. Установите вместо этого значение data, и он должен обрабатывать файлы R в каталоге данных. @hadley: вы могли бы сделать простой патч, разрешающий вектор R.DIR? - person Shane; 22.02.2010
comment
@Shane: Я уже жаловался на это разработчикам roxygen, и это должно измениться в следующем выпуске - person hadley; 23.02.2010

Начиная с roxygen2> 4.0.0, вы можете задокументировать объект данных, определенный в другом месте, задокументировав имя объекта, определенного в виде строки:

#' This is data to be included in my package
#'
#' @author My Name \email{blahblah@@roxygen.org}
#' @references \url{data_blah.com}
"data-name"
person hadley    schedule 23.03.2014

Я счел полезным изучить примеры в пакете ggplot2.

См. ggplot2.r на github

Несколько замечаний:

  • Весь код Roxygen для наборов данных можно включить в один .r файл в R каталоге пакета.

См., Например, набор данных diamonds:

#' Prices of 50,000 round cut diamonds
#'
#' A dataset containing the prices and other attributes of almost 54,000
#'  diamonds. The variables are as follows:
#'
#' \itemize{
#'   \item price. price in US dollars (\$326--\$18,823)
#'   \item carat. weight of the diamond (0.2--5.01)
#'   \item cut. quality of the cut (Fair, Good, Very Good, Premium, Ideal)
#'   \item colour. diamond colour, from J (worst) to D (best)
#'   \item clarity. a measurement of how clear the diamond is (I1 (worst), SI1, SI2, VS1, VS2, VVS1, VVS2, IF (best))
#'   \item x. length in mm (0--10.74)
#'   \item y. width in mm (0--58.9)
#'   \item z. depth in mm (0--31.8)
#'   \item depth. total depth percentage = z / mean(x, y) = 2 * z / (x + y) (43--79)
#'   \item table. width of top of diamond relative to widest point (43--95)
#' }
#'
#' @docType data
#' @keywords datasets
#' @name diamonds
#' @usage data(diamonds)
#' @format A data frame with 53940 rows and 10 variables
NULL

В результате получается файл справки, который выглядит следующим образом:

пример документации roxygen

person Jeromy Anglim    schedule 20.08.2014
comment
Вероятно, после этого ответа документация Roxygen изменилась. вот как это теперь выглядит - person vlad1490; 22.06.2019
comment
Как это работает теперь работает, потому что «Lazyload: true». Если вы не используете «Lazyload», эти объекты данных не определены. В этом случае вам нужно использовать «старый» код Roxygen2. - person Eli Holmes; 03.07.2021