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