问题描述
我正在尝试加载历史记录Shiny输入,它对除checkboxInput
以外的所有输入类型都适用。当执行复选框的updateSelectInput
命令时,它没有正确设置。具体来说,当我尝试使用值FALSE
更新复选框时,它将值设置为TRUE
。
要使用该代码,请将复选框留空,然后单击 Save Inputs 按钮以创建文件“ inputs.RDS”。该文件包含输入的名称及其值。然后,单击浏览按钮并加载文件“ 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
中要尝试加载的复选框的值,这是合乎逻辑的,这正是我所期望的。有解决这个问题的想法吗?
解决方法
对复选框执行updateSelectInput命令时,设置不正确
那是你的问题。 updateSelectInput
个更新selectInput
个。 updateCheckboxInput
毫不奇怪地更新了checkbox
。