我想为不同的标签显示不同的输入。所以我尝试构建一个包含多个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群组中找到替代方案。有没有办法用自己的侧边栏和主面板显示多个标签,还是应该为此创建不同的应用程序?
答案 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)