#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. Я, наконец, нашел способ правильно установить пакет, однако это только с помощью отсутствия какой-либо документации вообще