我试图在用户修改另一个selectInput(multiple=T)
选项中的选择后,在动态生成的selectInput中保留用户选择的值。每当我修改我的选择时,所有动态生成的值都会被重置。
例如:
我最初从“Letters”selectInput中选择“A”,“B”和“C”,然后选择“1”; “1”,“2”;和由“A”,“B”和“C”生成的动态生成的selectInput选项中的“1”,“2”,“3”。
初始选择:
然后我想在“Letters”selectInput选项中修改我的选择,以便只选择“A”和“B”(即,我删除“C”)。执行此操作后,为“A”生成的所有值和为“B”生成的所有值(即“1”表示“a”;“1”和“2”表示“b”)将被重置。
重置(空)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)
答案 0 :(得分:5)
我意识到这是一个相当古老的帖子,但我相信如果你还没找到它,这就是你正在寻找的答案:
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)
}
})
#This is the added code
observe({
updateSelectInput(session, "A", "A",selected=lapply(reactiveValuesToList(input), unclass)$A )
updateSelectInput(session, "B", "B", selected=lapply(reactiveValuesToList(input), unclass)$B )
updateSelectInput(session, "C", "C", selected=lapply(reactiveValuesToList(input), unclass)$C )
})
}
shinyApp(ui,server)