从一个复选框组中获取值只有一次闪亮

时间:2015-03-26 15:28:52

标签: r 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)
    }
  })
})

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

我现在遇到的问题是它一直输出我从复选框组中选择或取消选择的值,但我想只捕获按下“下一步”按钮后选择的最后一个值。

有任何帮助吗?我已经检查了文档,但它非常缺乏。

2 个答案:

答案 0 :(得分:2)

这是给猫皮肤的一种方法。

我们将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")
    )
  )
))

enter image description here

答案 1 :(得分:2)

我找到了: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)
      })
    }
  })
})