【发布时间】:2014-04-13 20:44:21
【问题描述】:
这本质上是对这个问题的详细示例的后续跟进(没有得到答案): conditionalPanel in shiny (doesn't seem to work)
示例应用:根据用户选择显示面板(“list1”、“list2”等)。 “list3”未被选中,应该不显示。
ui.R
displayList <- c("list1", "list2", "list3")
shinyUI(pageWithSidebar(
headerPanel("Shiny Display List"),
sidebarPanel(
checkboxGroupInput('dlist', 'Display List:', displayList, selected = displayList[1:2])
),
mainPanel(
h4("Display List"),
conditionalPanel(condition = "length(intersect(input.dlist, displayList[1])) > 0",
p("Some List 1 entries")
),
conditionalPanel(condition = "length(intersect(input.dlist, displayList[2])) > 0",
p("Some List 2 entries")
),
conditionalPanel(condition = "length(intersect(input.dlist, displayList[3])) > 0",
p("Some List 3 entries") #WASN'T SELECTED, SHOULD NOT DISPLAY INITIALLY
)
)
))
server.R
shinyServer(function(input, output) {
observe({cat(input$dlist, "\n")})
observe({cat(length(intersect(input$dlist, "list3")))})
})
为了测试是否满足条件,我在 server.R 中运行了observe,输出显示确实不满足面板 3 的条件(下面的“0”)。
list1 list2
0
但是,应用仍然显示“list3”
知道为什么吗?我确实尝试了不同形式的条件(而不是使用intersect 等),但没有成功。
用答案编辑
正如@nstjhp 和@Julien Navarre 所指出的,conditionalPanel“条件”需要在 Javascript 中。对于上面的示例,它的工作原理如下:
conditionalPanel(condition = "input.dlist.indexOf('list1') > -1",
p("Some List 1 entries")
)
【问题讨论】:
-
条件必须是 Javascript 而不是 R。
-
感谢您的评论。我正在尝试
'input.dlist in "list3"'、"input.dlist.indexOf('list3') > -1"等的变体,但我的 JS-foo 很弱。有什么帮助吗?input.dlist甚至是一个数组吗?使用:stackoverflow.com/questions/1181575/…