如何在R ShinyServer中返回多个值

时间:2016-10-26 22:48:15

标签: r shiny shiny-server

我正在做以下事情:

  1. 使用R ShinyUI,获取变量A,B,C范围的客户输入;
  2. 在R ShinyServer中,读入csv文件,并使用客户端输入来切片csv,并获得我需要的部分;
  3. 对csv执行循环计算,根据循环输出计算各种统计数据,并绘制所有这些统计数据。
  4. 伪代码:

    data = read.csv('file.csv')
    
    shinyServer(function(input, output) {
    
      data <- reactive({ 
      data = data[data$A<INPUT1 & data$B> INPUT2 & data$C<INPUT3,]
      })
    
     for (i in 1:dim(data)[1]){
       result1[i] = xxx
       result2[i] = xxx
      }
    
    
      output$plot <- renderPlot({
      plot(result1)
      })
    
     })
    

    上述代码不起作用。我想知道:

    1. 如何正确合并用户输入并获取变量&#34;数据,&#34;
    2. 如何从输出$ plot
    3. 绘制result1和result2

      谢谢!

1 个答案:

答案 0 :(得分:0)

for循环应位于renderPlot内,因此每次input$month更改时,响应数据都会更改,然后for lop将更新变量。如果在响应式表达式之外有for循环,那么它将在应用程序启动时执行一次,但在input更改后才会执行。

以下是基于您在原始问题中提供的伪代码的简单示例,以说明可能的解决方案。

library(shiny)

ui <- shinyUI( fluidPage(
  fluidRow(
    column(4,
      numericInput("input1", "Speed >", 8),
      numericInput("input2", "Dist >", 15)
    ),
    column(8, 
      plotOutput("plot")
    )
  )
))

server <- shinyServer(function(input, output) {
  dat0 <- cars

  data <- reactive({ 
    dat0[dat0$speed > input$input1 & dat0$dist > input$input2,]
  })

  output$plot <- renderPlot({
    s <- dim(data())[1] 
    result1 <- numeric(s)
    result2 <- numeric(s)
    for (i in 1:s){
     result1[i] <- data()[i, 1]
     result2[i] <- data()[i, 2]
    }
    plot(result1, result2)
  })

})

shinyApp(ui = ui, server = server)