尝试从 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, ..)
就是这个意思。
您好,感谢您的帮助。我正在尝试制作一个应用程序,根据另一个选择器的选择更新一个 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, ..)
就是这个意思。