【问题标题】:Passing ggplot2 function as input in R Shiny在 R Shiny 中传递 ggplot2 函数作为输入
【发布时间】:2017-08-16 03:48:06
【问题描述】:

我希望用户选择显示哪种 ggplot 图形(geom_plot()、geom_boxplot() 等),但我不知道如何传递“函数”而不是函数的字符串。

我的一个输入如下所示:

selectInput("graph_type", "Select graph type", 
        c("geom_point()", "geom_boxplot()"), selected = NULL, multiple = FALSE,
        selectize = TRUE, width = NULL, size = NULL)

输出如下所示:

  output$p1 = renderPlot({
    ggplot(raw, aes(x=raw[,input$x1], y=raw[,input$y1])) +input$graph_type

我得到的错误如下所示:

错误:不知道如何将 input$graph_type 添加到绘图中

有人可以帮帮我吗?谢谢!

附:假设代码中的其他所有内容都有效。如果需要,可以提供整个脚本。

【问题讨论】:

  • 我假设input$graph_type 是作为字符传递的,所以"geom_point()"。既然是这样,ggplot 就不知道怎么加了。我会尝试as.name(input$graph_type)
  • @WestleyDang 如果我的解决方案解决了您的问题,您可以接受

标签: r shiny


【解决方案1】:

使用get 按对象名称返回值。

ggplot(raw, aes(x=raw[,input$x1], y=raw[,input$y1])) + 
    get(input$graph_type)()

【讨论】:

  • 如果你先去掉括号可能会起作用。看看这个小测试:get( "mean()" ) ### Error in get("mean()") : object 'mean()' not found
  • 您似乎难以理解含义。 selectInput 的值是我放入 get 的值。您的 get 参数不会是返回的内容。
  • 这成功了!我想这是因为我必须从输入本身中排除“()”?有人可以解释为什么会这样吗?
  • 因为mean() 不是函数。这是一个“电话”。它们不是同一种东西。函数的namemean
猜你喜欢
  • 2016-10-13
  • 1970-01-01
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 2016-03-24
  • 2016-11-30
相关资源
最近更新 更多