【发布时间】:2016-11-01 23:34:54
【问题描述】:
在用户修改另一个 selectInput(multiple=T) 选项中的选择后,我试图将用户选择的值保留在动态生成的 selectInput 中。每当我修改我的选择时,所有动态生成的值都会被重置。
例如:
我最初从“Letters”selectInput中选择“A”、“B”和“C”,然后选择“1”; “1”、“2”;以及由“A”、“B”和“C”生成的动态生成的 selectInput 选项中的“1”、“2”、“3”。
初始选择:
然后我想修改“字母”选择输入选项中的选择,以便只选择“A”和“B”(即,我删除“C”)。完成此操作后,为“A”生成的所有值和为“B”生成的所有值(即“a”为“1”;“b”为“1”和“2”)都被重置。
为 a 和 b 重置(空)值:
删除 c 后如何保留 a 和 b 的值(如果最初选择)?
library(shiny)
ui <- fluidPage(
sidebarPanel(
uiOutput("n1"),
uiOutput("n2")
),
mainPanel(
textOutput("Current"),
textOutput("Old")
)
)
server <- function(input, output, session){
output$n1 <- renderUI({
selectInput("no1", "Letters", choices=c("A", "B", "C"), multiple=T)
})
output$n2 <- renderUI({
if(!is.null(input$no1)){
lst <- vector("list", length(input$no1))
for(i in 1:length(lst)){
lst[[i]] <- selectInput(input$no1[i], input$no1[i], choices=c(1,2,3), multiple=T)
}
return(lst)
}
})
# observe({lk <<- reactiveValuesToList(input)})
Values <- reactiveValues(old="start")
session$onFlush(once=FALSE, function(){
isolate({ Values$old<-input$A })
})
output$Current <- renderText({paste(input$A)})
output$Old <- renderText({paste(Values$old)})
# observe({
# updateSelectInput(session, "A", "A", choices=c(1,2,3), selected=Values$old )
# })
}
shinyApp(ui,server)
【问题讨论】:
-
您可以尝试记住选择(将它们设置为全局变量),然后使用
updateSelectInput来恢复这些值。现在因为这些a、b选择每次都会重新渲染,所以选择会被重置 -
我根据进度更新了代码。我已经能够使用 session$onFlush 保存先前选择的输入。现在我想弄清楚如何将这些保存的值合并到 updateSelectInput 中。任何帮助将不胜感激。