Являются ли вкладки с их собственными боковыми панелями и mainPanels возможными в блеске?
Я хотел бы отображать разные входы для разных вкладок. Поэтому я попытался создать страницу с несколькими вкладками. Тем не менее, я не могу использовать sth, как показано ниже:
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. Есть ли способ отобразить несколько вкладок с их собственными боковыми панелями и mainPanels, или я должен создать для этого различные приложения?
Ответы
Ответ 1
Если я не неправильно понимаю ваш вопрос, я думаю, вы даже можете уклониться от части jQuery (из ответа @f1r3br4nd), предоставив идентификатор для функции tabsetPanel
, здесь id = "conditionedPanels"
. Параметр value
(т.е. Какая вкладка выбрана на главной панели) затем доступен через переменную input
.
Пример minmal: 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"
)
)
))
Ответ 2
Я получил свою работу, имея только один sidebarPanel
, как в примерах приложений Shiny, но затем обертывая материал в sidebarPanel
, который предназначен только для определенных вкладок в отдельных вызовах conditionalPanel
как . Трюк заключается в том, чтобы строка символов, которая является аргументом условия conditionalPanel
, представляет собой оператор jQuery, который смотрит на атрибут html
текущей выбранной вкладки и ===
на имя вкладки, для которой должно отображаться это содержимое на боковой панели:
conditionalPanel(
"$('li.active a').first().html()==='Foo'",
actionButton("bar","Bar"));
... где Foo
- это название вкладки.
Короче говоря, одна боковая панель, но ее содержимое зависит от активной вкладки.