我有2个列表,每个列表包含以另一个变量p_id
为条件的IDs d
。
d1 <- as.list(unique(df$p_id[df$d==1]))
d2 <- as.list(unique(df$p_id[df$d==2]))
我想在我 Shiny 的应用程序中添加一个
conditionalPanel
以相应地显示/隐藏selectInput
小部件。在我的用户界面
dashboardPage
,dashboardBody
中,我具有以下内容:box(
conditionalPanel(
condition = "input.p_id.indexOf('d1')!=-1"
, selectInput(
inputId = "d_number"
,label = "Select Day:"
,choices = list("Day 1" = "1")
,selected = "1"
)
),
conditionalPanel(
condition = "input.p_id.indexOf('d2')!=-1"
, selectInput(
inputId = "d_number"
,label = "Select Day:"
,choices = list("Day 1" = "1", "Day 2" = "2")
,selected = "1"
)
)
),
我的理解是
condition
必须在js
中,而不是r
中。例如,我正在尝试为第一个条件复制p_id %in% d1
。但是,这不起作用。我尝试了
condition = "input.p_id.indexOf(d1)!=-1"
,但它也不起作用。任何人都可以为我想要实现的建议正确的
js
语法是什么?谢谢! 最佳答案
我认为您无需使用conditionalPanels.
就可以以更简单的方式实现所需的功能。我们可以一次生成selectInput
,然后在其他updateSelectInput
更改时使用input
更新它。这是一个工作示例:
library(shiny)
ui = fluidPage(
selectInput('maxdays','Max number of days:', c(1,2,3)),
selectInput('days','Days:',c(1))
)
server = function(input, output, session) {
observe({
updateSelectInput(session,'days',choices=seq(1,input$maxdays))
})
}
runApp(shinyApp(ui = ui, server = server))
另一种解决方案是,每当第一个
renderUI
更改时,就使用selectInput
重新渲染selectInput
:library(shiny)
ui = fluidPage(
selectInput('maxdays','Max number of days:', c(1,2,3)),
uiOutput('uiDays')
)
server = function(input, output, session) {
output$uiDays <- renderUI({
selectInput('days','Days:', choices=seq(1,input$maxdays))
})
}
runApp(shinyApp(ui = ui, server = server))
希望这可以帮助!
关于javascript - r Shiny -带条件的conditionalPanel:选中列表中的项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48760041/