我有2个列表,每个列表包含多个ID p_id
,条件是另一个变量d
。
d1 <- as.list(unique(df$p_id[df$d==1]))
d2 <- as.list(unique(df$p_id[df$d==2]))
我想在我的闪亮应用中添加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
语法是什么?谢谢!
答案 0 :(得分:2)
我认为你可以在不使用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))
1}}改变。这是一个有效的例子:
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))
:
var empWithDepartments = from emp in Employee where emp.DeptId != NULL select emp.DeptId;
var result = from dep in Department where !empWithDepartments.Contains(dep.Id) select dep;
希望这有帮助!
答案 1 :(得分:2)
感谢@Florian。我修改了他的答案,这是实现理想行为的可能方法:
library(shiny)
ui = fluidPage(
selectInput('p_id','ID:', c(111,222,333)),
uiOutput('uiID')
)
server = function(input, output, session) {
maxdays <- reactive({
if(input$p_id %in% c(111)){
x = 1
}else{
if(input$p_id %in% c(222)){
x = 2
}else
x = 3
}
return(x)
})
output$uiID <- renderUI({
selectInput('days','Days:', choices=seq(1,maxdays()))
})
}
runApp(shinyApp(ui = ui, server = server))
在我的应用中,列表c(111,222,333)
和相应的列表是数据集中的变量,并在脚本的开头定义。