【问题标题】:How to update a checkboxInput using updateSelectInput in Shiny如何在 Shiny 中使用 updateSelectInput 更新复选框输入
【发布时间】:2020-08-11 15:12:23
【问题描述】:

我正在尝试加载历史 Shiny 输入,它适用于除 checkboxInput 之外的所有输入类型。当它为一个复选框执行updateSelectInput 命令时,它没有正确设置它。具体来说,当我尝试使用值FALSE 更新复选框时,它会将值设置为TRUE

要使用代码,请将复选框留空并单击保存输入按钮以创建文件“inputs.RDS”。该文件包含输入的名称及其值。然后,单击Browse 按钮并加载文件“inputs.RDS”。然后点击Load Inputs按钮,复选框被选中,好像updateSelectInput传递的值是TRUE。这是我的代码:

library(shiny)

# Define UI
ui <- (fluidPage
        (
        fileInput("sessionFileName", "Session File Name"),
        actionButton("loadInputs", "Load Inputs"),
        actionButton("saveInputs", "Save Inputs"),
        # Inputs
        sidebarPanel(
          checkboxInput(inputId = "checkbox",label="Checkbox",value=FALSE),
          width=3
          )
        )
      )

# Define server logic
server <- (function(input, output, session)
{
  
  getInputs <- function (sessionFileName) {
    print (paste('getInputs session file name is',sessionFileName,sep=' '))
    if (is.null(sessionFileName)) return ()
    inFile <- sessionFileName
    if (!is.null(inFile)) {
      print ('inFile')
      inputData <- readRDS(file=inFile$name)
    }
    else return ()
    print (inputData)
    for (i in 1:length(inputData)) {
      if (names(inputData[i]) == 'sessionFileName') next
      if (names(inputData[i]) == 'saveInputs') next
      if (names(inputData[i]) == 'loadInputs') next
      print (paste(names(inputData[i]),inputData[[i]],sep=' '))
      updateSelectInput(session=session, inputId=names(inputData[i]), selected=inputData[[i]])
    }
    return ()
  }
  
  observeEvent (input$saveInputs, {
    inputValues <- lapply(reactiveValuesToList(input), unclass)
    saveRDS( inputValues , file = 'inputs.RDS')
  })

  observeEvent (input$loadInputs, {
    print (paste('Session file name is',input$sessionFileName,sep=' '))
    getInputs (input$sessionFileName)
  })
})
  
# Start the shiny app
shinyApp(ui = ui, server = server)

我检查了typeof 的复选框值,我试图加载它,这是合乎逻辑的,这是我所期望的。有解决这个问题的想法吗?

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    当它为一个复选框执行 updateSelectInput 命令时,它没有正确设置它

    那是你的问题。 updateSelectInput 更新 selectInputs。 updateCheckboxInput 毫不意外地更新了checkboxs。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 2019-06-04
      • 1970-01-01
      • 2017-06-08
      • 2016-06-14
      相关资源
      最近更新 更多