При создании пакета я получил ошибку
Error in namespaceExport(ns, exports) :
undefined exports: FooBarBaz
Что это значит и как его исправить?
При создании пакета я получил ошибку
Error in namespaceExport(ns, exports) :
undefined exports: FooBarBaz
Что это значит и как его исправить?
Эта ошибка возникает при попытке экспортировать объект, который не существует. То есть пакет NAMESPACE
содержит строку
export(FooBarBaz)
но FooBarBaz
не существует в пакете.
Один случай, когда может возникнуть эта ошибка, - это когда вы пытаетесь создать общую страницу справки для нескольких функций, используя roxygen2
. В приведенном ниже примере f
и g
являются связанными функциями, которые должны быть задокументированы на странице WidgetUtils
.
#' Widget-related functions
#'
#' Utility functions to assist working with widgets.
#' @param x An input.
#' @return A value.
#' @name WidgetUtils
#' @export
NULL
#' @rdname WidgetUtils
#' @export
f <- function(x)
{
x + 1
}
#' @rdname WidgetUtils
#' @export
g <- function(x)
{
x - 1
}
Ошибка в этом фрагменте кода - это включение тега @export
в блоке roxygen WidgetUtils
. Это говорит, что roxygen создает строку экспорта в файле NAMESPACE
, но ее значение равно NULL
, поэтому экспортировать нечего. Удалив строку @export
, чтобы код работал правильно.
Будьте осторожны, чтобы не прокомментировать строки, начинающиеся с апострофа!
Не повезло, внутри моей функции я прокомментировал строку, которая начиналась с апострофа (перед "Battlestar Galactica" в моем поддельном примере), поэтому он выглядит так:
#' @export
getMyFavoriteSciFiShows <- function() {
myFavoriteSciFiShows <-
c('Star Trek Next Generation',
#'Battlestar Galactica',
'Babylon 5')
return(myFavoriteSciFiShows)
}
Это действительно испортило roxygen2 v 6.0.1, поскольку оно не сигнализировало никаких ошибок, и это то, что он вложил в мой файл NAMSEPACE:
export("Galactica',")
export(Battlestar)
Не только мой желаемый экспорт myFavoriteSciFiShows отсутствовал, но были добавлены два ошибочных. Эти ошибочные могут привести к экспорту undefined.
У меня была очень глупая опечатка: в скелете roxygen2 я скопировал то, что должно было войти в поле #' @return
, в @export
.
Должно было:
#' @return new data frame
#' @export
Вместо этого у меня было:
#' @return
#' @export new data frame
Я удалил функцию, а roxygen2, похоже, не удалил ее из файла NAMESPACE. Зайдите туда и удалите эту строку вручную, и это исправит ошибку