尝试从 pickerinput 更新选择时出错

Error when trying to update selections from a pickerinput

您好,感谢您的帮助。我正在尝试制作一个应用程序,根据另一个选择器的选择更新一个 pickerinput 的选择。这个想法是,如果一个 pickerinput 选择了某些内容,那么另一个将删除所有当前选择(反之亦然),但是我在尝试更新 pickerinputs

时遇到错误

我的代码如下:

library(shiny)
library(shinywidgets)

var1 <- c(1,2,3,4,1,2,3)
var2 <- c(1,2,3,3,1,2,2,1,2,1)

shinyApp(
  ui = fluidPage(
    pickerInput("primero", 
                "opciones a escoger", 
                choices = var1,
                selected = var1,
                multiple = TRUE
                ),
    pickerInput("segundo", 
                "opciones a escoger 2", 
                choices = var2,
                multiple = TRUE
    )
  ),
  server = function(input, output, session){
    
    
    valor <- reactive({
     c( input$primero)
    })
    
   observeEvent(input$primero,{
     req(valor())
     updatePickerInput(session,"segundo",
                       choices = var2,
                       selected = 
                         if_else(length(valor())>0, NULL, head(var2,1))
                       )
     
   }) 
    
  }
)

错误信息:

Warning: Error in : `false` must be NULL, not a double vector.
  [No stack trace available]

有什么建议吗?非常感谢

if_else 要求其第二个和第三个参数的 class/type 必须相同。此外,由于它旨在成为矢量化逻辑 if/else,因此将其中之一设置为 NULL 没有意义。

仔细查看代码,您使用不当:不要假设它(或 base::ifelse)是 if/else 的直接替代品,它们非常不同。将您的 observeEvent 替换为:

   observeEvent(input$primero,{
     req(valor())
     updatePickerInput(session,"segundo",
                       choices = var2,
                       selected =
                         if (!length(valor()) > 0) head(var2, 1)
                       )
     
   }) 

我在这里 略微 简化了它:当我们有 if 而没有 else 时,当条件计算为 FALSE 时它 returns NULL,我认为你的 if_else(length(valor()) > 0, NULL, ..) 就是这个意思。