9

光沢のある次の 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 <- 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)
  })
})

私は何を間違えましたか?

4

1 に答える 1

19

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を読むことをお勧めします。反応性に関するページは、この質問にかなりうまく対処しています。

于 2013-07-16T18:27:04.533 に答える