带有自己的侧边栏和主面板的标签是否有光泽?

时间:2013-04-25 21:44:31

标签: r rstudio shiny

我想为不同的标签显示不同的输入。所以我尝试构建一个包含多个tabPanel的页面。但是,我不能像下面那样:

library(shiny)

shinyUI(pageWithSidebar(
  headerPanel("Header"),

  tabsetPanel(
    tabPanel(
      headerPanel("Tab 1"),
      sidebarPanel(
        selectInput("var", "Parametre", choices = c("1", "2", "3"))
        ),
      mainPanel(
        textOutput("text1")
        )
      ),
    tabPanel(
      headerPanel("Tab 2"),
      sidebarPanel(
        selectInput("var", "Parametre", choices = c("21", "22", "23"))
      ),
      mainPanel(
        textOutput("text2")
      )
    )
    )
  ))

我怀疑pageWithSidebar导致了问题,但我无法在Google群组中找到替代方案。有没有办法用自己的侧边栏和主面板显示多个标签,还是应该为此创建不同的应用程序?

3 个答案:

答案 0 :(得分:24)

如果我没有误解你的问题,我认为你甚至可以通过提供tabsetPanel函数的id来回避jQuery部分(来自@ f1r3br4nd回答),这里id = "conditionedPanels"。然后可以通过value变量获取input参数(即在主面板中选择了哪个标签)。

最小的示例server.R可能为空,但shinyServer功能骨架除外。 ui.R文件可能如下所示。

shinyUI(pageWithSidebar(
  headerPanel("Conditional Panels"),
  sidebarPanel(
    conditionalPanel(condition="input.conditionedPanels==1",
                     helpText("Content Panel 1")
    ),
    conditionalPanel(condition="input.conditionedPanels==2",
                     helpText("Content Panel 2")
    ) 
  ),
  mainPanel(
    tabsetPanel(
      tabPanel("Panel 1", value=1), 
      tabPanel("Panel 2", value=2)
      , id = "conditionedPanels"
    )
  )
))

答案 1 :(得分:10)

我让我的工作只是在Shiny示例应用中只有一个sidebarPanel,但随后将sidebarPanel中的内容包装在仅conditionalPanel调用的conditionalPanel调用中的特定标签中3}}。然后诀窍是使html条件参数的字符串成为jQuery语句,该语句查看当前所选选项卡的===属性,并conditionalPanel( "$('li.active a').first().html()==='Foo'", actionButton("bar","Bar")); 将其命名为名称该内容应出现在侧栏中的标签:

Foo

...其中{{1}}是标签的标题。

简而言之,一个侧边栏但其内容以活动标签为条件。

答案 2 :(得分:0)

我知道这是一篇旧文章,但是当我在寻找类似问题的答案时偶然发现了它。我认为您也可以通过使用fluidPage(而不是pageWithSidebar)然后在每个sidebarLayout中使用tabPanels函数来实现所需的功能。

一个例子:

library(shiny)

ui <- fluidPage(
  headerPanel("Header"),
  tabsetPanel(
    tabPanel('Tab 1',
             sidebarLayout(
               sidebarPanel(
                 selectInput("var", "Parametre", choices = c("1", "2", "3"))
               ),
               mainPanel(
                 textOutput("text1")
               )
             )  
    ),
    tabPanel('Tab 2',
             sidebarLayout(
               sidebarPanel(
                 selectInput("var", "Parametre", choices = c("21", "22", "23"))
               ),
               mainPanel(
                 textOutput("text2")
               )
             )
    )
  )
)

server <- function(input, output) {}

shinyApp(ui, server)