从R shiny observe()

时间:2017-02-14 06:54:17

标签: r shiny

我想通过在R shiny中使用observe()来创建一个向量。在代码打击中,如何创建一个所有输入$ n连接起来的vactor。目前,我只能显示单个值,但无法连接并显示来自sliderInput的所有输入。

ui.R

library(shiny)

fluidPage(
    titlePanel("Observer demo"),
    fluidRow(
            column(4, wellPanel(
                    sliderInput("n", "N:",
                                min = 10, max = 1000, value = 200, step = 10)
            )),
            column(8,
                   tableOutput("text")
            )
    )
   )

server.R

library(shiny)

function(input, output, session) {

    observed=reactiveValues(
            input=NULL
    )

    observe({    
            observed$input=input$n
           # observed$input=c(observed$input,input$n) # tried this but not working
    })

    output$text <- renderTable({
            observed$input
    })
    }

2 个答案:

答案 0 :(得分:3)

如果您在观察者中添加print(observed$input),则会在使用observed$input=c(observed$input,input$n)时看到您遇到无限循环,因为observeobserve$input有反应意志修改后立即再次运行。

为防止这种情况发生,您可以使用isolate

observed$input=c(isolate(observed$input),input$n)

与@Pork Chop的答案一样,您也可以使用observeEvent来观察input$n

答案 1 :(得分:3)

试试这个,您可以根据需要使用cbindrbind

rm(list = ls())
library(shiny)

ui <- fluidPage(
  titlePanel("Observer demo"),
  fluidRow(
    column(4, wellPanel(
      sliderInput("n", "N:",
                  min = 10, max = 1000, value = 200, step = 10)
    )),
    column(8,
           tableOutput("text")
    )
  )
)

server <- function(input, output, session) {

  observed=reactiveValues(
    input=NULL
  )

  observeEvent(input$n,{    
    observed$input <- cbind(observed$input,input$n)
  })

  output$text <- renderTable({
    print(observed$input)
    observed$input
  })
}

shinyApp(ui <- ui, server <- server)