繁体   English   中英

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

[英]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)
    }
  })
})

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

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

有帮助吗? 我检查了文档,但它非常稀缺。

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

我们使用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)
      })
    }
  })
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM