【问题标题】:Set global object in Shiny在 Shiny 中设置全局对象
【发布时间】:2013-07-15 01:41:06
【问题描述】:

假设我有以下闪亮的 server.R 文件:

shinyServer(function(input, output) {
  output$plot <- renderPlot({
    data2 <- data[data$x == input$z, ]  # subsetting large dataframe
    plot(data2$x, data2$y)
  })
   output$table <- renderTable({
     data2 <- data[data$x == input$z, ]  # same subset. Oh, boy...
     summary(data2$x)
   })
})

为了不必在每次渲染调用中都运行data2 &lt;- data[data$x == input$z, ],我该怎么做?如果我执行以下操作,我会收到“'closure' 类型的对象不是子集”错误:

shinyServer(function(input, output) {
  data2 <- reactive(data[data$x == input$z, ])
  output$plot <- renderPlot({
    plot(data2$x, data2$y)
  })
  output$table <- renderTable({
    data2 <- data[data$x == input$z, ]
    summary(data2$x)
  })
})

我做错了什么?

【问题讨论】:

    标签: r subset shiny


    【解决方案1】:

    data2 是一个返回您正在寻找的子集的函数。所以你需要调用data2 并将输出保存到某个变量,然后你可以绘制/汇总各个列

    ## data should be defined somewhere up here or in global.R
    
    shinyServer(function(input, output) {
      data2 <- reactive(data[data$x == input$z, ])
    
      output$plot <- renderPlot({
        newData <- data2()
        plot(newData$x, newData$y)
      })
    
      output$table <- renderTable({
        newData <- data2()
        summary(newData$x)
      })
    })
    

    如果您还没有阅读过,我建议您阅读http://rstudio.github.io/shiny/tutorial/#welcome。反应性页面很好地解决了这个问题。

    【讨论】:

    • 感谢您的帮助,我对 Shiny 很陌生(这是我使用它的第二天)。您的解决方案有效,但当我在子集例程中插入ifelse() 时无效,这实际上是这样的:data2 &lt;- reactive(ifelse(input$z == '', data, data[data$x == input$z, ]))。当我这样做时,我收到以下错误:Error in plot.window(xlim, ylim, log = log, ...): need finite 'xlim' values.
    • 顺便说一句,我已经完成了 RStudio 教程(至少是基本部分),并打算随着时间的推移深入研究它和包文档。
    • @wleoncio 该错误几乎可以肯定是因为您将一个空的data.frame 传递给绘图。所以我建议做一些调试来确定data2 是否返回你所期望的。您还可以在绘图输出函数中添加检查,例如if (nrow(newData) == 0) return(),如果没有数据,它将阻止它尝试绘图。当我在开发一个闪亮的应用程序时,我喜欢添加一个表,稍后将其注释掉,它只会打印不同的调试值(即当前数据中的行数、某个变量的级别等)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 2016-10-09
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多