タブごとに異なる入力を表示したいと思います。そこで、いくつかのtabPanelを使用してページを作成しようとしました。しかし、私は以下のような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グループで代替手段を見つけることができませんでした。独自のサイドバーとmainPanelで複数のタブを表示する方法はありますか、それともこの目的のために別のアプリを作成する必要がありますか?
私があなたの質問を誤解しないのであれば、tabsetPanel
関数(ここではid = "conditionedPanels"
)のIDを指定することで、jQueryの部分(@ f1r3br4ndの回答から)を回避することもできると思います。 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"
)
)
))
シャイニーのサンプルアプリのようにsidebarPanel
を1つだけ持っていて、それをsidebarPanel
でラップすることで動作するようになりました。これは、個別のconditionalPanel
呼び出しの特定のタブ専用です。 ここ 。秘訣は、conditionalPanel
の条件引数である文字列を、現在選択されているタブのhtml
属性を調べ、===
sの名前に変換するjQueryステートメントにすることです。このコンテンツがサイドバーに表示されるタブ:
conditionalPanel(
"$('li.active a').first().html()==='Foo'",
actionButton("bar","Bar"));
...ここで、Foo
はタブのタイトルです。
要するに、1つのサイドバーですが、その内容はアクティブなタブを条件としています。
これが古い投稿であることは知っていますが、同様の質問に対する答えを探していたときに偶然見つけました。 (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)