gpt4 book ai didi

r - 如何在带有 tidyr 和 ggplot2 的函数中使用 dplyr 的 enquo 和 quo_name

转载 作者:行者123 更新时间:2023-12-03 21:36:16 25 4
gpt4 key购买 nike

library(dplyr) #Devel version, soon-to-be-released 0.6.0
library(tidyr)
library(ggplot2)
library(forcats) #for gss_cat data

我正在尝试编写一个函数来结合即将发布的 quosures dplyrtidyr::gather 一起开发版本和 ggplot2 .到目前为止,它似乎适用于 tidyr ,但我在绘图时遇到了麻烦。

以下功能似乎适用于 tidyr's gather :
GatherFun<-function(gath){
gath<-enquo(gath)

gss_cat%>%select(relig,marital,race,partyid)%>%
gather(key,value,-!!gath)%>%
count(!!gath,key,value)%>%
mutate(perc=n/sum(n))
}

但我无法弄清楚如何使情节起作用。我尝试使用 !!gathggplot2 ,但它没有用。
GatherFun<-function(gath){
gath<-enquo(gath)

gss_cat%>%select(relig,marital,race,partyid)%>%
gather(key,value,-!!gath)%>%
count(!!gath,key,value)%>%
mutate(perc=n/sum(n))%>%
ggplot(aes(x=value,y=perc,fill=!!gath))+
geom_col()+
facet_wrap(~key, scales = "free") +
geom_text(aes(x = "value", y = "perc",
label = "perc", group = !!gath),
position = position_stack(vjust = .05))
}

最佳答案

为了完成这项工作,我不得不使用 dplyr::quo_name将 quosure 更改为字符串。我也不得不使用 ggplot2::aes_string ,这也要求所有输入都是字符串,因此用 "" 引用.

GatherFun <- function(gath){
gath <- enquo(gath)
gathN <- quo_name(gath)

gss_cat %>%
select(relig, marital, race, partyid) %>%
gather(key, value, -!!gath) %>%
count(!!gath, key, value) %>%
mutate(perc = round(n/sum(n), 2)) %>%
ggplot() +
geom_col(aes_string(x = "value", y = "perc", fill = gathN)) +
facet_wrap(~key, scales = "free") +
geom_text(aes_string(x = "value", y = "perc", label = "perc", group = gathN),
position = position_stack(vjust = .05))
}

关于r - 如何在带有 tidyr 和 ggplot2 的函数中使用 dplyr 的 enquo 和 quo_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43405843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com