R中的环境和ggplot2的故障排除

问题描述 投票:0回答:1

我一直试图修复以下代码,但被卡住。

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'”。我知道这是环境问题,但不确定如何解决。

r ggplot2 environment
1个回答
0
投票

使用{{}},它将未引用的变量评估为数据框的列。

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

© www.soinside.com 2019 - 2024. All rights reserved.