我有两个列表,每个列表包含多个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
小部件。
在我的UI 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
语法,我试图实现?谢谢!
3条答案
按热度按时间yzuktlbb1#
我认为你可以用一种更简单的方式来实现你想要的,而不需要使用
conditionalPanels.
。我们可以生成一次selectInput
,然后每当其他input
发生变化时,就用updateSelectInput
更新它。下面是一个工作示例:另一种解决方案是使用
renderUI
在第一个selectInput
更改时重新呈现selectInput
:希望这有帮助!
wxclj1h52#
感谢@Florian。我修改了他的答案,这里有一个实现所需行为的可能方法:
在我的应用程序中,列表
c(111,222,333)
和相应的列表是数据集中的变量,并在脚本的开头定义。vcudknz33#
对于任何想要使用
conditionalPanel
的人,条件是用Javascript编写的,因此您可以使用includes()
方法。IMO的好处是它包含在一个
modalDialog
中。