2

新到闪亮。希望有人可以帮助我。

我有几个来自同一个向量的 selectizeInput 绘图选项。我的目标是让值在被选择后不会出现在其他输入中。IE。如果在输入 2 中选择了值 1,则它不应在输入 1、3 或 4 中可用。

ui<- shinyUI(fluidPage(

titlePanel("Selectize Test"),

sidebarPanel(
selectizeInput(
  "groupoptions1", "Group 1", choices = NULL, multiple = TRUE
),
selectizeInput(
  "groupoptions2", "Group 2", choices = NULL, multiple = TRUE
),
selectizeInput(
  "groupoptions3", "Group 3", choices = NULL, multiple = TRUE
),
selectizeInput(
  "groupoptions4", "Group 4", choices = NULL, multiple = TRUE
)

),

mainPanel(
  htmlOutput("grouplist")
)
))

server<- shinyServer(function(input, output, session) {

groupdata <- reactive({

  as.vector(1:30)

})

observe({
updateSelectizeInput(session, "groupoptions1", choices = groupdata())

updateSelectizeInput(session, "groupoptions2", choices = groupdata())

updateSelectizeInput(session, "groupoptions3", choices = groupdata())

updateSelectizeInput(session, "groupoptions4", choices = groupdata())
})


output$grouplist <- renderPrint({

  list(
    match(input$groupoptions1, groupdata()),
    match(input$groupoptions2, groupdata()),
    match(input$groupoptions3, groupdata()),
    match(input$groupoptions4, groupdata())
  )
})

})

我尝试为每个 selectizeInput 使用单独的选择向量来减去对方的选择,但是每次该向量更新所有现有选择时都会被擦除。

非常感谢任何帮助!

4

1 回答 1

3

当您使用所选参数更新选项输入的输入时,您可以并且需要设置这些值:

 updateSelectizeInput(session, "groupoptions1", choices = groupdata1(),
                      selected=c(2,3))

您需要根据需要调整值。我将您的示例简化为两个列表,并移动了所有相关部分以进行观察

  observe({
    vals1<-input$groupoptions1
    vals2<-input$groupoptions2

    cat("updata input ")
    cat(isolate(vals1))
    cat(" | ")
    cat(isolate(groupdata2()))
    cat("\n")
    updateSelectizeInput(session, "groupoptions1",
                         choices =  as.vector(1:10)[! 1:10 %in% vals2], 
                         selected=vals1)
    updateSelectizeInput(session, "groupoptions2", 
                         choices =as.vector(1:10)[! 1:10 %in% vals1], 
                         selected=vals2)


  })
于 2015-12-29T22:44:52.407 回答