24

我想为不同的选项卡显示不同的输入。所以我尝试用几个tabPanels构建一个页面。但是,我不能像下面这样:

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是导致问题的原因,但我在谷歌群组中找不到替代方案。有没有办法用自己的侧边栏和主面板显示多个选项卡,或者我应该为此创建不同的应用程序?

4

3 回答 3

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"
    )
  )
))
于 2013-06-22T12:48:50.183 回答
10

我通过sidebarPanel在 Shiny 示例应用程序中只有一个类似的应用程序让我的工作,然后将内容包装在sidebarPanel仅用于单独conditionalPanel调用中的特定选项卡的内容中,如here。诀窍是使作为conditionalPanel条件参数的字符串成为一个 jQuery 语句,该语句查看html当前选定选项卡的属性并将===其发送到该内容应出现在侧边栏中的选项卡的名称:

conditionalPanel(
    "$('li.active a').first().html()==='Foo'",
    actionButton("bar","Bar"));

...Foo标签的标题在哪里。

简而言之,一个侧边栏,但其内容取决于活动选项卡。

于 2013-06-20T15:05:20.860 回答
2

我知道这是一篇旧帖子,但是当我在寻找类似问题的答案时偶然发现了它。我认为您也可以通过使用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)
于 2019-01-11T22:02:57.663 回答