评估R Shiny conditionalPanel中的输入条件

时间:2017-09-27 15:55:03

标签: javascript r shiny

我正在构建一个R Shiny仪表板,我正在尝试实现conditionalPanels。当然,我是JavaScript的新手。关于conditionalPanels的关于SO的帖子很多,但我见过的每个帖子在条件表达式中使用input.something,通常是这样的:

conditionalPanel(
    condition = "input.tabs == 'correlation'",

    actionButton("generate_correlation", "Generate Heat Map")
  )

我知道条件语句中的表达式是一个被评估为JavaScript表达式的字符串,但我想知道是否可以访问input以外的其他变量和对象?例如,它可以评估反应函数吗?我想按下一个按钮,然后有条件地出现一个新标签。我创造了

         tabPanel("Tab 1",
                  actionButton("dropColumnsComplete", "Next"))

然后,我在服务器端创建了一个反应式表达式来处理这个问题:

  dropColumnsComplete <- reactive(input$dropColumnsComplete,{
    return(TRUE)
  })

单击该按钮会触发input$dropColumnsComplete事件,该事件应调用在调用函数TRUE时返回dropColumnsComplete()的反应式表达式。然后,我加入

     conditionalPanel(condition = "dropColumnsComplete()",
                      tabPanel("Tab 2")
                      ),

我希望按下按钮会出现标签2。我知道我没有正确访问条件表达式中的dropColumnsComplete() - 它应该是document.dropColumnsComplete()吗? shiny.dropColumnsComplete()?关于此问题的文档缺乏令人惊讶的缺失,因此我对如何在JavaScript中访问input$...以外的变量感到茫然。

1 个答案:

答案 0 :(得分:0)

没有理由将反应性写入有条件地显示/隐藏元素。请查看shinyjs,而不是Dean Attali

使用shinyjs

的示例
library(shiny)
library(shinyjs)

ui <- fluidPage(
  useShinyjs(),
  actionButton("show", "Click me once to show stuff!"),
  actionButton("toggle", "Click me any times to toggle stuff!"),
  hidden(
    div(id = "d1",
      "Content hidden until button is clicked"
    )
  ),
  hidden(
    div(id = "d2",
        "Content toggled when button is clicked"
    )
  )
)

server <- function(input, output) {
  observeEvent(input$show, {
    show("d1")
  })

  observeEvent(input$toggle, {
    toggle("d2")
  })
}
shinyApp(ui, server)