Создание пакета 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-расширений и не могу найти проблему - не знаю, смогу ли я просто ослепнуть, но я не вижу, что я делаю по-разному в этих функциях от других, которые я написал!
Ответы
Ответ 1
Вы используете roxygen, но, скорее всего, вы не будете генерировать свой пакет в сборке.
Вызов:
roxygen2::roxygenize('.', roclets=c('rd', 'collate', 'namespace'))
или, если вы используете RStudio, отредактируйте параметры проекта (меню "Инструменты" ) и на вкладке "Инструменты сборки" установите "Создать документацию с помощью Roxygen".
Ответ 2
EDIT:
@R Йода решил проблему, изложенную в моем "ответе": она была связана с конфликтом между .Rbuildignore
и именем функции (более precisley, имя файла документации по функциям).
Такая же проблема. И для меня это было связано с именем функции. Когда имя функции ниже 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://stackoverflow.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
Ответ 3
У меня была аналогичная проблема при выполнении 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$
( "$" означает соответствие конца строки).
Voila: -)