Почему моя функция пакета не находит другие функции с неэкспортными тегами?

Я прочитал большую часть замечательной книги Хэдли Уикхем: http://r-pkgs.had.co.nz/, но я не понимаю, почему мои функции в моем пакете не могут найти другие мои неэкспортированные функции.

например у меня есть

#' @export
#' @import ggmap
#' @import hexbin
map  <- function(return.query, zoom, maptype, histObj) {

  UseMethod("map")

}
#' 
map.querySold  <- function(query, zoom = 11, maptype = "roadmap") {
  My Code
}

Запуск этого с чистой средой и загрузка моего пакета генерирует ошибку:

> map(x) # x is of class querySold
Error in UseMethod("map") : 
  no applicable method for 'map' applied to an object of class "c('querySold', 'data.frame')"

Что не так и как я могу это исправить? Я думал, что внутренние функции всегда доступны для всех других функций в пакете? Только когда я загружаю все функции с помощью devtools::load_all("."), это работает.


person uncool    schedule 28.08.2015    source источник


Ответы (1)


Я подозреваю, что у вас нет @export map.querySold. Попробуйте следующее:

Поместите @export прямо перед первой функцией map.

#' @import ggmap
#' @import hexbin
#' @export
map  <- function(return.query, zoom, maptype, histObj) {

  UseMethod("map")

}

И добавьте сюда @export

#'@export 
map.querySold  <- function(query, zoom = 11, maptype = "roadmap") {
  My Code
}

Затем запустите devtools::document() и проверьте файл NAMESPACE.

Если это не сработает, может быть полезно опубликовать свой NAMESPACE. Я думаю, ты должен был

S3method(map.querySold)
export(map)
person Whitebeard    schedule 28.08.2015
comment
Благодарю вас! Я вижу, что метод S3 не раскрывается так, как я думал. Нужно ли мне экспортировать все функции в моем пакете (я имею в виду случай, когда я ссылаюсь на другую простую функцию)? - person uncool; 29.08.2015
comment
Добро пожаловать. Нет, вам не нужно экспортировать все ваши функции. Просто экспортируйте функции, предназначенные для пользователя. Другие ваши функции по-прежнему будут работать из ваших экспортированных функций. - person Whitebeard; 29.08.2015
comment
Ах да. Итак, методы S3 также необходимо экспортировать, вот что меня поразило. - person uncool; 29.08.2015