【问题标题】:Best way to convert character strings in to function arguments in R/ggplot2? [duplicate]在 R/ggplot2 中将字符串转换为函数参数的最佳方法? [复制]
【发布时间】:2015-02-10 10:48:10
【问题描述】:

我正在开发一个闪亮的应用程序,用户可以选择使用 ggplot2 绘制哪些变量,但是我完全不确定将字符串(要绘制的变量的名称)转换为合适的最佳方法函数参数。

考虑以下非常人为的工作示例:

df <- data.frame(gp = factor(rep(letters[1:3], each = 10)),
                 y = rnorm(30))

ggplot(df, aes(x = gp, y = y)) +
   geom_point() + facet_wrap(~gp)

现在,如果我只有变量名称的字符串,我将如何告诉 ggplot 在 x 轴上绘制“gp”变量?

我整理了以下方法,但有没有更简单、更传统的方法?请注意我在 aes() 和 facet_wrap() 函数中使用的不同方法。

x.var <- "gp"

ggplot(df, aes(x=lol <- switch(x.var,"gp"=gp), y = y)) +
   geom_point() + facet_wrap(as.formula(paste("~",x.var)))

非常感谢任何见解!

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    如果您使用aes_string 来指定您的xy 变量,而不是x=lol &lt;- switch(x.var,"gp"=gp),会更好,即使用以下内容:

    ggplot(df, aes_string(x = x.var, y = 'y')) +
      geom_point() + facet_wrap(as.formula(paste("~",x.var)))
    

    不幸的是,对于facet_wrap 函数,您已经完成的可能是最佳方式。

    【讨论】:

    • 哇,我不知道那个功能。谢谢你。不过,一般来说,有没有一种使用字符串作为函数参数的首选方法?假设我想 dplyr::filter(df,x.var=="a"),其中 x.var="gp"?
    • 很高兴有帮助:)。在我看来,首选的方法是尽可能不使用字符串作为函数参数。在您上面的特定情况下,使用text==text 表示法似乎非常奇怪,但表示variable==text。如果您必须做类似的事情,也许eval(parse(text='x.var==a')) 可能会起作用,但我必须先进行测试。我认为最好使用可重现的示例(例如这个非常好的示例)作为不同的问题发布,以便我们进行测试。
    • 哦,我的意思是变量==文本,但是变量的名称可以更改,但是我们将它的名称以字符串形式作为 x.var="gp"。所以我们会过滤 gp=="a"
    • 有趣的案例。这就是我认为你会使用它的方式。以上可能有效,但我不确定。我必须先测试。这是一个有趣的问题。你能把它作为一个新的发布吗?我有兴趣尝试解决它,看看其他人如何处理它会很有趣。 (如果您这样做,请在此处将问题的链接发送给我)。
    • 这件事对我有用,但可能有更好的方法来做到这一点:df %&gt;% filter( eval(parse(text="gp == 'a'"),envir=df))
    猜你喜欢
    • 2014-01-28
    • 2018-05-28
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2017-11-08
    • 2017-12-08
    • 1970-01-01
    相关资源
    最近更新 更多