Пакет R устанавливается правильно, но функции не работают

#r #function #installation #package

#r #функция #установка #пакет

Вопрос:

Недавно я пытался разработать свой собственный пакет R. Поэтому я установил Rtools, и все, казалось, было в порядке, пакет установлен и загружен, а документация была создана без ошибок. Однако, если была вызвана какая-либо из функций в пакете, возвращалась ошибка «не удалось найти функцию».

Просматривая некоторые предыдущие вопросы о переполнении стека, в некоторых ответах указывались проблемы с зависимостями, в других говорилось об именах функций, содержащих точки. Но даже следующий пример не будет работать:

Учитывая «путь» к локальной машине, мы выполняем следующий R-код:

 library("devtools")
library("roxygen2") #No docs will be generated, so maybe this is not needed.
setwd("path")
create("my_package")
  

Теперь мы записываем файл с именем «trivial_function.R», содержащий следующее

 trivial_function <- function(x,y) {
  return(x*y)
}
  

Перемещаем «trivial_function.R» в path/my_package/R

Здесь я думаю, что этот шаг не нужен, но в предыдущих попытках я выполнил:

 setwd("my_package")
document()
  

И, наконец,:

 setwd("path")
check("my_package")
install("my_package")
library("my_package")
trivial_function(2,3)
  

Возвращает следующее сообщение об ошибке:
Ошибка в trivial_function (2, 3): не удалось найти функцию «trivial_function»

Спасибо за ваше внимание! Есть идеи?

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

1. Вам нужно поместить функцию в пространство имен. Вы можете создать файл «NAMESPACE» в корневом каталоге. exportPattern("^[[:alpha:]] ") экспортирует все функции с буквенными именами. Самым простым способом было бы использовать прототип Rstudio, переместив ваши R-коды в R/ и изменив файлы «DESCRIPTION» и «NAMESPACE» по мере необходимости.

2. Спасибо, но, к сожалению, я не могу заставить его работать. Если я добавлю exportPattern(«^[[:alpha:]]] «) в пространство ИМЕН перед установкой, файл будет перезаписан. Если я добавлю его впоследствии в папку «lib», это не повлияет

3. Я подозреваю, что у вас есть некоторые настройки, при которых вы запускаете roxygen2, который автоматически генерирует файл пространства ИМЕН. Вы можете добавить примечание roxygen для функции. Смотрите kbroman.org/pkg_primer/pages/docs.html

4. ДА. Это верно! Файл пространства ИМЕН генерируется Roxygen2 независимо от документации. Действительно, созданы две разные версии этого! Один после create(), который содержит «exportPattern(«^[^\.]»)» и другой после document(), который не работает. Результат одинаков с любым из них, хотя

5. Я, наконец, нашел способ правильно установить пакет, однако это только с помощью отсутствия какой-либо документации вообще