Устранение неполадок со средами и ggplot2 в R - PullRequest
0 голосов
/ 11 апреля 2020

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

library(tidyverse)

piechart <- function(data, mapping) {
  ggplot(data, mapping) +
    geom_bar(width = 1) + 
    coord_polar(theta = "y") + 
    xlab(NULL) + 
    ylab(NULL)
}

piechart3 <- function(data, var, ...) {
  piechart(data, aes_(~factor(1), fill = substitute(var)))
}

f <- function() {
  levs <- c("2seater", "compact", "midsize", "minivan", "pickup", 
            "subcompact", "suv")
  piechart3(mpg, factor(class, levels = levs))
}
f()

При попытке запустить f () - "Ошибка в коэффициенте (класс, уровни =)" я получаю следующий ответ levs): объект 'levs' не найден ". Я понимаю, что это проблема среды, но я не знаю, как ее исправить.

1 Ответ

1 голос
/ 11 апреля 2020

Используйте {{}}, который оценивает переменную без кавычек в качестве столбца кадра данных.

library(ggplot2)
library(rlang)

piechart <- function(data, mapping) {
   ggplot(data, mapping) +
     geom_bar(width = 1) + 
     coord_polar(theta = "y") + 
     xlab(NULL) + 
     ylab(NULL)
}

piechart3 <- function(data, var, ...) {
   piechart(data, aes(factor(1), fill = {{var}}))
}

f <- function() {
  levs <- c("2seater", "compact", "midsize", "minivan", "pickup", 
        "subcompact", "suv")
  mpg$class <- factor(mpg$class, levels = legs)
  piechart3(mpg, class)
}

f()

enter image description here

...