传递列名作为参数

时间:2019-12-26 16:33:58

标签: r function ggplot2 dplyr tidyverse

我正在尝试创建一个函数,可以在其中传递列名作为参数。我看过其他类似post on passing column names to a function的示例,但出现错误:

  

错误:列column未知

这是我在csv中的数据:

Role
1 Primary
2 Secondary
3 Primary
4 Primary

这是我的代码:

mydata = read.csv("EA5.csv")

my_bar_chart <- function(data, column, title){
  column<-eval(substitute(column),data, parent.frame())
  toReturn <- data %>% 
    group_by(column) %>% 
    summarize(count = n()) %>% 
    mutate(percent = count/sum(count), column = reorder(column, -count, FUN=identity)) %>%
    ggplot(aes(x=column, y=count)) +
    xlab(title)+
    geom_col() +
    geom_text(aes(label = paste0(round(100 * percent, 1), "%")))
  return(toReturn)
}

p1 <- my_bar_chart(mydata, Role, "EA5 Controller Role")

grid.arrange(p1)

1 个答案:

答案 0 :(得分:3)

在最新版本的rlang中,我们可以为此使用{curly-curly({{column}}):

mydata = iris

my_bar_chart <- function(data, column, title){
  toReturn <- data %>% 
    group_by({{column}}) %>% 
    summarize(count = n()) %>% 
    mutate(percent = count/sum(count), column = reorder({{column}}, -count, FUN=identity)) %>%
    ggplot(aes(x=column, y=count)) +
    xlab(title)+
    geom_col() +
    geom_text(aes(label = paste0(round(100 * percent, 1), "%")))
  return(toReturn)
}

p1 <- my_bar_chart(mydata, Species, "EA5 Controller Role")