Ошибка в get (as.character (FUN), mode = "function", envir = envir): объект 'guide_legend' из режима 'function' - PullRequest
0 голосов
/ 12 февраля 2020

Я создаю пакет и столкнулся с проблемой при создании виньетки. Я получаю сообщение об ошибке при попытке связать виньетка, но при запуске функции из консоли ошибок нет.

Пример ввода данных

a <- c(1,1,2,2,3,3,4,4,5,5)
b <- c("T", "T", "N","N", "N","N", "T", "T", "N", "N")
c <- c("car","bike","car","bike","car","bike","car","bike","car","bike")
d <- c(10,12,15,19,25,29,38,47,66,90)
data <- data.frame(a,b,c,d)
colnames(data) <- c("xaxis", "rug", "type", "val")

Внутри файла пакета .r это это функция, которую я хотел бы вызвать:

#' Test
#'
#' @param data test data
#'
#' @return
#' @importFrom ggplot2 ggplot geom_point geom_rug
#' @importFrom ggnewscale new_scale_color
#' @export
#'
test <- function(data){
  ggplot(data, aes(x = xaxis, y = val, color = type, group = type)) + geom_point() +
    new_scale_color() + geom_rug(aes(x = xaxis, color =rug), sides = "b")
}

Я проверил и установил пакет и попытался вызвать эту тестовую функцию в документе RMarkdown (виньетка). Это ошибка, которую я получаю:

Ошибка при получении (as.character (FUN), mode = "function", envir = envir): объект 'guide_legend' режима 'function' не найден Вызовы: ... bump_aes_scales -> lapply -> FUN -> match.fun -> get Выполнение остановлено

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

Expected_output

Более того, когда я удаляю new_scale_color () из тестовой функции, я не получаю никаких ошибок, и виньетка отлично сплетается. У кого-нибудь есть идея, в чем проблема и как ее решить?

1 Ответ

1 голос
/ 12 февраля 2020

Кажется, проблема в пакете ggnewscale, в этой строке, где он пытается создать вызов ggplot::guide_legend. Это делается через match.fun, который затем выдает ошибку в этой строке . Это может быть связано с тем, что match.fun просматривает только 2 уровня родительской среды для указанной функции. Вы можете попробовать добавить неэкспортированную локальную функцию псевдонима в свой пакет до появления проблемной функции c:

guide_legend <- function(...) ggplot2::guide_legend(...)
...