在闪亮的情况下仅从复选框组获取值一次

obtain the values from a checkboxgroup only once in shiny

我做了如下程序:

ui.r

library(shiny)
shinyUI(fluidPage(
    mainPanel(
    textOutput("text1"),
    checkboxGroupInput("checkGroup", 
                       label = h3("Alternatives"), 
                       choices = list("A" = 1, 
                                      "B" = 2, 
                                      "C" = 3,
                                      "D" = 4),
                       selected = NULL),
    actionButton("action", label = "Next")
    )
))

server.r

library(shiny)
shinyServer(function(input, output) {
  observe({
    if(input$action>0 & input$action<=2){
      valores<-renderText({
        input$checkGroup
      })
      data<-unlist(strsplit(valores(), split=" "))
      print(data)
    }
  })
})

我已经设法捕获了值 selected 并将它们放入向量中,因此我解决了之前遇到的一个问题。

我现在遇到的问题是,它始终从复选框组输出哪些值 I select 或 deselect,但我只想捕获最后一个值 select在我按下“下一步”按钮后编辑。

有什么帮助吗?我已经查看了文档,但是它非常稀缺。

这是给那只猫剥皮的一种方法。

我们将 isolatereactiveactionButton 一起使用,以确保在按下按钮之前不会计算任何内容。通过将输入本身与任何进一步的格式隔离开来,我们可以出于任何目的多次调用它。请注意,如果没有隔离,它将在输入更改时进行评估。

server.R

library(shiny)
shinyServer(function(input, output) {

  # store as a vector to be called wherever desired
  # evaluated whenever inputs change
  datasetInput <- reactive({
    perm.vector <- as.vector(input$checkGroup)
    perm.vector
  }) 

  # call as a text output
  output$textOut <- renderText({
    input$action # makes sure nothing moves till the button is hit
    # isolate prevents datasetInput from reactively evaluating
    isolate(datasetInput()) 
  })

  # call in a different place as a data table output
  output$dataTableOut <- renderDataTable({
    input$action # makes sure nothing moves till the button is hit
    isolate(df <- data.frame(inputs = datasetInput()))
    df   
  }, options = list(
    lengthMenu = list(c(5, 15, -1), c('5', '15', 'All')),
    pageLength = 15)
  )

})

ui.R

library(shiny)
shinyUI(fluidPage(

  sidebarLayout(
    sidebarPanel(
      checkboxGroupInput("checkGroup", 
                         label = h3("Alternatives"), 
                         choices = list("A" = 1, 
                                        "B" = 2, 
                                        "C" = 3,
                                        "D" = 4),
                         selected = NULL),
      actionButton("action", label = "Next")
    ),

    mainPanel(
      h4("Print as text"), textOutput("textOut"),
      h4("Print as data table"), dataTableOutput("dataTableOut")
    )
  )
))

我发现于:http://www.inside-r.org/packages/cran/shiny/docs/isolate

可以将一组句子隔离开来,所以下面的效果很好:

library(shiny)
shinyServer(function(input, output) {
  observe({
    if(input$action>0 & input$action<=2){
      isolate({
        values<-renderText({
          input$checkGroup
        })
        data<-unlist(strsplit(valores(), split=" "))
        print(data)
      })
    }
  })
})