【问题标题】:Are tabs with their own sidebars and mainPanels possible in shiny?带有自己的侧边栏和主面板的选项卡是否可以闪亮?
【发布时间】:2013-04-19 23:13:54
【问题描述】:

我想为不同的标签显示不同的输入。所以我尝试用几个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 引起了问题,但我在 google 群组中找不到替代方案。有没有办法用自己的侧边栏和主面板显示多个选项卡,或者我应该为此创建不同的应用程序?

【问题讨论】:

  • 请将您的数据框添加到问题中。
  • @barerd 制作了一个玩具示例数据框来说明您的问题。例如与data.frame( ID = seq(10) , Yas = runif(10) , Hosp = rep( c("A","B" ) , 5 ) )类似的东西

标签: r shiny


【解决方案1】:

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

一个小例子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"
    )
  )
))

【讨论】:

  • 您可以在这里找到更多信息:groups.google.com/forum/#!topic/shiny-discuss/07EU9xG11l0
  • 您能解释一下12 应该代表什么吗?在实践中,我的tabPanel() 命令通常具有tabPanel("Panel 2", uiOutput("blah")) 之类的内容,所以也许您可以扩展您的答案以包括处理此类常见情况?
  • @warship 是你在tabPanel中选择的value
  • 我明白,但这与tabPanel("Panel 2", uiOutput("blah"))tabPanel("Panel 2", plotOutput("blah2")) 等情况有什么关系(或者更确切地说,如何应用于)?我很难将上面的代码调整到这种情况,因为我不使用value=
  • @warship 对于上述工作方法,您必须提供 value 参数...否则您必须使用 jQuery 以某种方式解决此问题,就像在另一个答案中所做的那样.
【解决方案2】:

我的工作是通过只有一个 sidebarPanel 就像在闪亮的示例应用程序中一样,然后将内容包装在 sidebarPanel 中,这仅适用于单独的 conditionalPanel 调用中的特定选项卡作为 here。诀窍是使conditionalPanel的条件参数的字符串成为一个jQuery语句,查看当前选定选项卡的html属性,并将===s设置为该选项卡的名称内容应该出现在侧边栏中:

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

...Foo 是选项卡的标题。

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

【讨论】:

  • 感谢您对此和其他一些关于 R 的回答,我通过您的个人资料阅读了这些回答。
  • 虽然我喜欢这个解决方案,但我认为支持的解决方案是@mark-heckmann 提供的。在此线程中查看他的解决方案,并在评论中查看他到 google 组的链接。我会向 OP 建议他接受他的回复作为解决方案。
【解决方案3】:

我知道这是一篇旧帖子,但在寻找类似问题的答案时偶然发现了它。我认为你也可以通过使用fluidPage(而不是pageWithSidebar)然后在每个tabPanels 中使用sidebarLayout 函数来完成你想要的。

一个例子:

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)

【讨论】:

    猜你喜欢
    • 2016-11-24
    • 1970-01-01
    • 2017-04-23
    • 2016-02-26
    • 2020-07-22
    • 2018-06-02
    • 2020-09-20
    • 1970-01-01
    • 2018-12-24
    相关资源
    最近更新 更多