【问题标题】:Creating a Function for a Mosaic Plot with Ggmosaic using Standard Evaluation使用标准评估为带有 Ggmosaic 的马赛克图创建函数
【发布时间】:2017-06-13 21:57:16
【问题描述】:

库(ggmosaic) 图书馆(tidyverse)

我仍在尝试通过标准评估了解编程的一些细微差别。对于这个问题,我正在尝试使用来自 ggmosaic 的“快乐”数据集创建一个函数,以创建变量“健康”和“快乐”的基本马赛克图。

下面是我想使用标准评估创建函数的代码。我希望能够从快乐数据集中输入任意两个分类变量,并创建一个基本的马赛克图,如代码中所述。

happy%>%
na.omit()%>%
count(happy,health)%>%
ggplot()+
geom_mosaic(aes(weight=n,x=product(health),fill=health))

但是,我无法完全正确地编写代码。我以前问过类似的问题,但我仍然很难理解何时何地使用 .dots 参数以及如何在标准评估中指定输入。以下是我一直在使用的错误代码版本之一...

Mosaic<-function(product="health",fill="happy"){
happy%>%na.omit()%>%
count_(c(product,fill))%>%
ggplot()+
geom_mosaic(aes_string(weight="n",x=product(product),fill=fill))
}

任何让这个工作的指针都将不胜感激,特别是任何关于如何使用 SE 正确编码的建议。

【问题讨论】:

    标签: r ggplot2 dplyr tidyverse


    【解决方案1】:

    你可以这样做:

    Mosaic<-function(var_product="health",fill="happy"){
      happy%>%
        na.omit()%>%
        count_(c(var_product,fill))%>%
        ggplot(aes(weight=n))+
        geom_mosaic(aes_string(x=paste0("product(", var_product, ")"),fill=fill))
    }
    

    例子:

    Mosaic("sex","degree")
    

    【讨论】:

    • 谢谢,效果很好。只是一个问题,为什么代码的 x=product() 部分必须使用 paste0 ?我希望在编写其他代码时能更好地理解这一点。
    • 因为使用了aes_string(),所以表达式必须是字符串。 paste0() 创建一个组合“product(”和输入变量的字符串。
    猜你喜欢
    • 2019-03-30
    • 2012-08-28
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 2017-04-06
    • 2017-11-20
    相关资源
    最近更新 更多