R 参考通道变量在一个%>;%&引用;链条
从我前面的问题开始,您如何在分析的后面引用新创建的列?如何引用R 参考通道变量在一个%>;%&引用;链条,r,ggplot2,dplyr,R,Ggplot2,Dplyr,从我前面的问题开始,您如何在分析的后面引用新创建的列?如何引用.data[[“cyl”]并将标题重命名为cyl 库(tidyverse) #>警告:程序包“tidyverse”是在R版本3.6.2下构建的 #>警告:程序包“tidyr”是在R版本3.6.2下构建的 #要传递到函数中的变量 参数%head(3) 图形_按% 分组依据({{by}})%>% 总结(平均值:=平均值({var}},na.rm=TRUE))%>% ggplot(aes(平均值,{{by}}))+ geom_线()+ 几
.data[[“cyl”]
并将标题重命名为cyl
库(tidyverse)
#>警告:程序包“tidyverse”是在R版本3.6.2下构建的
#>警告:程序包“tidyr”是在R版本3.6.2下构建的
#要传递到函数中的变量
参数%head(3)
图形_按%
分组依据({{by}})%>%
总结(平均值:=平均值({var}},na.rm=TRUE))%>%
ggplot(aes(平均值,{{by}}))+
geom_线()+
几何点()
}
图表单位(mtcars,单位=cyl,var=mpg)
purrr::map(参数,~graph_by(mtcars,by=.data[.x]],var=mpg))
#> [[1]]
##目标是在以后的分析中引用创建的变量
#图形_按%
#分组依据({{by}})%>%
#总结({prefix}{{var}}):=mean({{var}},na.rm=TRUE))%>%
#ggplot(aes(.data[.x]],{{by}}))+
#geom_线()+
#几何点()+
#实验室(x=“{by}}”)
# }
由(v0.3.0)于2020年2月19日创建此版本将起作用
graph_by <- function(data, by, var, prefix = "avg") {
by <- rlang::ensym(by)
data %>%
group_by({{ by }}) %>%
summarise(mean_value := mean({{ var }}, na.rm = TRUE)) %>%
ggplot(aes(mean_value, {{by}})) +
geom_line() +
geom_point()
}
purrr::map(params, ~ graph_by(mtcars, by = !!.x, var = mpg))
graph_by%
总结(平均值:=平均值({var}},na.rm=TRUE))%>%
ggplot(aes(平均值,{{by}}))+
geom_线()+
几何点()
}
purrr::map(参数,~graph_by(mtcars,by=!!.x,var=mpg))
请注意,我们使用
在映射中进行扩展
调用
然后显式使用ensym
,这样它将同时接受文字字符值和不带引号的符号。这是ggplot2中的一个错误,请您提交一个问题并在其中标记我(我的github句柄是@lionel-
)。问题是您试图使函数能够为同一个参数同时使用裸变量名和字符串吗?当我创建一个带有参数的函数时,我会将.data[[by]]
放在函数中,然后将字符串传递给by
。这样我就可以在绘图代码中添加,例如,labs(x=by)
,以获得有用的轴名称。@LionelHenry-Flick先生的解决方案解决了这个问题吗?你还需要一个github问题文件吗?是的,这是一个bug,它应该正确地标记为.data[
。MrFlick的解决方案改变了你函数的接口(使用符号而不是表达式),并且由于ensym的缘故,安全性稍差一些。
#>
#> [[3]]
graph_by <- function(data, by, var, prefix = "avg") {
by <- rlang::ensym(by)
data %>%
group_by({{ by }}) %>%
summarise(mean_value := mean({{ var }}, na.rm = TRUE)) %>%
ggplot(aes(mean_value, {{by}})) +
geom_line() +
geom_point()
}
purrr::map(params, ~ graph_by(mtcars, by = !!.x, var = mpg))