我一直试图修复以下代码,但被卡住。
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()时,我收到以下响应作为错误:“ factor(class,levels = levs)中的错误:未找到对象'levs'”。我知道这是环境问题,但不确定如何解决。
使用{{}}
,它将未引用的变量评估为数据框的列。
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()