【发布时间】: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 的复选框值,我试图加载它,这是合乎逻辑的,这是我所期望的。有解决这个问题的想法吗?
【问题讨论】: