R 创建可折叠列的标准方法

R 创建可折叠列的标准方法,r,twitter-bootstrap,shiny,flexbox,R,Twitter Bootstrap,Shiny,Flexbox,我想以一种直观的方式在R.R中实现可折叠列,并在UI.R中保留尽可能多的非交互式UI代码 我想出了几种制作可折叠柱的方法。一种是将整个UI放入对server.R中renderUI的调用中,并根据输入条件呈现不同的布局,如下所示: shinyApp( ui = fluidPage( uiOutput("panels"), checkboxInput("showSidePanel", "Show Side Panel", TRUE) ), s

我想以一种直观的方式在R.R中实现可折叠列,并在
UI.R
中保留尽可能多的非交互式UI代码

我想出了几种制作可折叠柱的方法。一种是将整个UI放入对
server.R
renderUI
的调用中,并根据输入条件呈现不同的布局,如下所示:

shinyApp(
    ui = fluidPage(
        uiOutput("panels"),
        checkboxInput("showSidePanel", "Show Side Panel", TRUE)
    ), 
    server = function(input, output) {
        output$panels <- renderUI(
            if (input$showSidePanel) {
                fluidRow(
                    column(4,
                           wellPanel(h2("Side Panel"))
                    ),
                    column(8,
                           wellPanel(h2("Main Panel"))
                    )
                )
            }
            else
                wellPanel(h2("Main Panel")))
    }
)

这是可扩展的,虽然UI仍然完全驻留在服务器代码中,但至少在逻辑上是分开的。然而,在我的服务器代码中加入一堆非交互式UI只是为了使其可折叠(我的实际侧面板由许多UI元素组成),这似乎还是违反直觉的。有没有一个简单的或合乎逻辑的方法来做到这一点,我错过了?如果可能的话,我希望继续使用
fluidPage
/
fluidRow
/
方法来处理UI。

您是否愿意使用
conditionalPanel()
?如果您不需要响应内容,而只需显示/隐藏功能,则可能会更容易隐藏一个面板/列,我希望其他面板/列增长以填充空间。然而,我的理想解决方案是与
条件面板
的形式相同的东西,只是具有我想要的功能。我可能会尝试开发类似的东西。您可以使用
shinyjs
包中的
hide
show
函数来隐藏或显示列。您可以为ui中的每个元素提供一个id并调用该函数。这可能是您是否愿意使用
conditionalPanel()
?如果您不需要响应内容,而只需显示/隐藏功能,则可能会更容易隐藏一个面板/列,我希望其他面板/列增长以填充空间。然而,我的理想解决方案是与
条件面板
的形式相同的东西,只是具有我想要的功能。我可能会尝试开发类似的东西。您可以使用
shinyjs
包中的
hide
show
函数来隐藏或显示列。您可以为ui中的每个元素提供一个id并调用该函数。它可能是某种类似于
shinyApp(
    ui = fluidPage(
        fillRow(flex = c(NA, 1), height = 100,
                uiOutput("sidePanel"),
                wellPanel(h2("Main Panel"))
        ),
        checkboxInput("showSidePanel", "Show Side Panel", TRUE)
    ), 
    server = function(input, output) {
        output$sidePanel <- renderUI(
            if (input$showSidePanel) {
                wellPanel(h2("Side Panel"))
            } else {
                NULL
            }
        )
    }
)