24

タブごとに異なる入力を表示したいと思います。そこで、複数の tabPanels を含むページを構築しようとしました。ただし、次のような 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 グループで代替手段を見つけることができませんでした。独自のサイドバーとメイン パネルを備えた複数のタブを表示する方法はありますか?それとも、この目的のために別のアプリを作成する必要がありますか?

4

3 に答える 3

24

tabsetPanel私があなたの質問を誤解していなければ、ここで関数の id を指定することで、(@f1r3br4nd の回答から) jQuery の部分を回避することもできると思いますid = "conditionedPanels"。パラメータ (つまり、メイン パネルで選択されているタブ) は、変数valueを介して使用できます。input

最小限の例: server.RShinyServer 関数のスケルトンを除いて、空の場合があります。ファイルは次の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

sidebarPanelShiny のサンプル アプリのようなものを 1 つだけ持つことで動作するようになりましたがsidebarPanel、特定のタブ専用のものをhereconditionalPanelのように個別の呼び出しでラップします。トリックは、 の condition 引数である文字列を、現在選択されているタブの属性を調べて、このコンテンツがサイドバーに表示されるタブの名前に sする jQuery ステートメントにすることです。conditionalPanelhtml===

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

...Fooタブのタイトルです。

つまり、サイドバーは 1 つですが、そのコンテンツはアクティブなタブを条件としています。

于 2013-06-20T15:05:20.860 に答える