roxygen2: функция не экспортируется в пространство имен даже после использования @export

#r #roxygen2

#r #roxygen2

Вопрос:

Я создаю пакет и получаю сообщение об ошибке, в котором говорится, что функция не является экспортированным объектом пакета. В скрипте R я использовал тег @export для экспорта функции, однако, когда я выполняю roxigenize с помощью document() или roxygen(), функция не экспортируется в пространство имен (хотя файл Rmd для этой функции создается).

Комментарии:

1. your_package:::your_function Работает ли после загрузки вашего пакета?

2. Да, это так. Однако, как я читал, этого делать не предлагается @jakub

3. Действительно. Просто проверяю. Вы определяете метод для какого-то класса S3? Также может быть полезно опубликовать здесь блок roxygen.

4. Да, это так. Вы имеете в виду, что я должен опубликовать R-скрипт или пространство имен? @jakub

5. @Rospa ваш комментарий сбивает с толку, поскольку он не включает символ @ перед экспортом, и ваше сравнение выглядит идентично (в обоих есть один пробел). Возможно, это было из-за форматирования markdown.

Ответ №1:

У меня была похожая проблема. Оказалось, что внутри моей функции я закомментировал строку, которая начиналась с апострофа (перед ‘Battlestar Galactica’ в моем поддельном примере), поэтому она выглядит следующим образом:

 #' @export
getMyFavoriteSciFiShows <- function() {
  myFavoriteSciFiShows <-
    c('Star Trek Next Generation',
      #'Battlestar Galactica',
      'Babylon 5')
  return(myFavoriteSciFiShows)
}
  

Это действительно испортило roxygen2 версии 6.0.1, поскольку оно не сигнализировало о каких-либо ошибках, и это то, что оно поместило в мой файл NAMSEPACE:

 export("Galactica',")
export(Battlestar)
  

Комментарии:

1. Спасибо, мне это тоже помогло. У меня сложилось впечатление, что roxygen пытается интерпретировать ЛЮБОЕ появление #’, и это часто приводит к путанице в @export и других вещах.

Ответ №2:

Это случилось со мной, затем я запустил

 devtools::document()
  

и нажмите check на Build вкладке, проблема решена.

Я даю этот ответ кому-то, у кого может возникнуть такая же проблема, и ищу это. Это может помочь.