【问题标题】:Passing in column name as argument传入列名作为参数
【发布时间】:2020-04-16 20:23:35
【问题描述】:

我正在尝试创建一个函数,我可以在其中将列名作为参数传递。我已经看到过类似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)

【问题讨论】:

标签: r function ggplot2 dplyr tidyverse


【解决方案1】:

在最新版本的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")

【讨论】:

  • 没问题!作为参考,它只是使用引用-取消引用模式的一种简写方式,所以!!enquo(column) 也应该可以工作。 Another good reference here.
猜你喜欢
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
相关资源
最近更新 更多