Сборка пакета R Недокументированные объекты кода

Я написал пакет R для интеграции с электронными медицинскими записями. Я думаю, что я правильно добавил импорт и зависимости в файле DESCRIPTION и задокументировал все через roxygen2, но на трех моих функциях (которые все находятся в одном файле) я получаю это предупреждение, когда запускаю devtools::check("."):

* checking for missing documentation entries ... WARNING
Undocumented code objects:
  'add_to_database' 'database' 'import_CPRD_data'
All user-level objects in a package should have documentation entries. 

Я думаю, что я задокументировал их так же, как и все мои другие функции, которые в порядке. Вот одна из нарушающих функций документации roxygen2:

#' Wrapper for dbconnect
#' 
#' Connects to a SQLite database or creates one if it does not already exist
#' 
#' If the '.sqlite' file extension is ommited from the dbname argument it is automatically added.
#'
#' @export
#' 
#' @param dbname character name path to database file
#' @return SQLiteConnection object
#' @examples \dontrun{
#' db <- database("mydb")
#' }
database <- function(dbname){
    if(!str_detect(dbname, "\\.sqlite$")) {
        dbname <- paste(dbname, "sqlite", sep = ".")
    } 
    dbConnect(SQLite(), dbname)
}

Как я могу избавиться от этой ошибки? Я добавил stringr и RSQLite в зависимый раздел файла DESCRIPTION, и они отображаются в NAMESPACE, так что я не думаю, что это проблема импорта - но что тогда я не могу задокументировать? Полный пакет находится здесь, а файл с файлом с нарушающими функциями находится здесь. Я посмотрел в написании руководства по расширениям R и не могу найти проблему - не знаю, ослепляю ли я от просмотра - но я не вижу, что я делаю в этих функциях иначе, чем другие, которые я написал!

7 ответов

У меня была похожая проблема при выполнении R CMD check:

Status: 1 WARNING
checking for missing documentation entries ... WARNING
Undocumented code objects:
  ‘build.log.output’

После удаления всех файлов пошагово я нашел причину: .Rbuildignore файл! Он содержит (помимо других строк) одну строку с

^.*\.log

Последняя строка заставляет R игнорировать все файлы, содержащие в своем имени ".log", а моя функция называлась "build.log.output", что заставляло R игнорировать файл документации "build.log.output.Rd", сгенерированный Roxygen2, когда создание файла пакета.

Следовательно R CMD check не удалось найти документацию в файле пакета!

Решение:

Улучшите регулярное выражение, чтобы игнорировать только реальные файлы журнала:

^.*\.log$

("$" означает совпадение с концом строки).

Вуаля:-)

Вы используете roxygen, но, скорее всего, вы не обогащаете свой пакет при сборке.

Либо позвоните:

roxygen2::roxygenize('.', roclets=c('rd', 'collate', 'namespace'))

или, если вы используете RStudio, отредактируйте параметры проекта (меню "Инструменты") и на вкладке "Инструменты сборки" установите флажок " Создать документацию с помощью Roxygen".

РЕДАКТИРОВАТЬ:

@R Йода решил проблему, изложенную в моем "ответе": Это было связано с конфликтом между .Rbuildignore и имя функции (более точно, имя файла документации функции).


Та же проблема здесь. И для меня это было связано с названием функции. Когда имя функции ниже load_rdata (или же loadrdata), Я получаю предупреждение Undocumented code objects: 'load_rdata', Когда я переименую функцию в load_rda, Все отлично.

Я знаю, что это половина вопроса (почему это происходит), половина ответа (возможно, из-за имен функций), но я подумала, что это может помочь кому-то натолкнуться на этот вопрос.

#' Load RData file.
#' 
#' @param file An RData file saved via \code{\link[base]{save}}.
#' @return The object save in \code{file}.
#' @references \url{http://stackru.com/a/5577647}
#' @export
load_rdata <- function(file = NULL) {
    env <- new.env()
    nm <- load(file, env)[1]
    env[[nm]]
}

Это выход из sesssionInfo() и был воспроизводим при использовании devtools 1.12.0 и roxygen2 6.0.0.

R version 3.3.2 (2016-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

locale:
[1] LC_COLLATE=German_Germany.1252  LC_CTYPE=German_Germany.1252    LC_MONETARY=German_Germany.1252
[4] LC_NUMERIC=C                    LC_TIME=German_Germany.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] devtools_1.12.0.9000 roxygen2_6.0.0.9000 

loaded via a namespace (and not attached):
 [1] R6_2.2.0            magrittr_1.5        tools_3.3.2         withr_1.0.2         memoise_1.0.0      
 [6] Rcpp_0.12.9         xml2_1.1.1          stringi_1.1.2       pkgload_0.0.0.9000  digest_0.6.12      
[11] stringr_1.1.0       pkgbuild_0.0.0.9000 commonmark_1.1 

Я столкнулся с недокументированной ошибкой кода, когда у меня было несколько функций для экспорта. Я думаю, что вам нужно добавить #' @describeIn. Вот мой пример.

#' @title Colors Definition
#'
#' @description Define colors with transparency value.
#'
#' @param alpha Transparency value (0-1), default 1.
#'
#' @return hex value of the color
#'
#' @examples
#'   Get_Red(0.5)
#'   Get_Red()
#'
#' @export Get_Red
#' @export Get_Blue
#'

Get_Red <- function(alpha = 1) {
  rgb(228 / 255, 26 / 255, 28 / 255, alpha)
}

#' @describeIn Get_Red Blue color function with transparency value.
Get_Blue <- function(alpha = 1) {
  rgb(55 / 255, 126 / 255, 184 / 255, alpha)
}

Я экспериментировал с игрушкой foofactorsпакет в книге Хэдли Викам . Мой data.R файл включен:

      #' A character string
#'
"MyString"

и fbind.R имел:

      #' Print a string
#'
#' Returns the string MyString
#'
#' @export
#'
myString <- function() {
  print(foofactors::MyString)
}

checkпожаловался на недокументированный код и данные. Я исправил это, изменив имя функции на theString. Таким образом, кажется, что имена не чувствительны к регистру, что странно.

После нескольких разочаровывающих часов я обнаружил, что у меня есть man/ в моем файле .Rbuildigore .

Я исправил это сообщение об ошибке, установив devtools пакет.

В моем случае я создал новый пакет на новом ноутбуке и установил все обычное R пакеты и аксессуары: installr, testthat, roxygen2 а также вспомогательные инструменты, такие как rtools а также MiKteX, При сборке пакета я получил то же сообщение об ошибке "проверка на отсутствие записей документации... ПРЕДУПРЕЖДЕНИЕ: недокументированные объекты кода". Но я полностью решил проблему, также установив devtools пакет.

Другие вопросы по тегам