在Shiny

时间:2017-09-21 00:58:13

标签: r shiny

我正在构建一个R Shiny Web应用程序来帮助进行数据探索。我有一个带有一行标签的主页面,然后是一行子标签: enter image description here

我希望有一个面板显示为用户提供不同的输入以便创建不同的图表(例如,当选择Bar Chart标签时,我想要一个数据集的下拉列表列,并且当选择Histogram时,我想要一个用于容器数量的滑块。

我可以使用第一级标签来做到这一点。例如,我的ui.R中的以下一行代码允许我在选择Correlation时轻松呈现面板:

conditionalPanel(
    condition = "input.tabs == 'correlation'",

    actionButton("generate_correlation", "Generate Heat Map")
  )

server.R

      tabsetPanel(
        id = "tabs",

        tabPanel("Correlation", value = "correlation",
                 plotOutput("correlation"))

... code for other tabs...

但是,我无法弄清楚如何访问嵌套tabPanel返回的值(例如,Bar ChartHistogram)。我试图使用这段代码:

tabPanel(
  "Visualize",
  value = "visualize",

  tabsetPanel(
    id = "vis_tabs",
    tabPanel("Bar Chart", value = "bar_tab",# <-- want a conditionalPanel to appear when this tab is selected

             plotOutput("bar_chart")),         
    tabPanel("Histogram", value = "histogram_tab",
             plotOutput("histogram"))
  )
),

使用以下 conditionalPanel

  conditionalPanel(
    condition = "input.vis_tabs" == "bar_tab",
    #CODE HERE FOR INPUT STUFF TO APPEAR WHEN BAR CHART TAB IS SELECTED
  ),

但是现在,上面的conditionalPanel 总是评估为true。这SO post是我能找到的最接近答案的答案,因为它专注于显示输出,所以它确实没有多大帮助。

我的猜测是,由于第二级选项卡是在第一级选项卡的范围内定义的,因此它返回的值在“全局”ui.Rserver.R范围内不可用。但如果是这种情况,我希望conditionalPanel总是评估为false,而它目前正在评估为永远是真的!

我也知道正在评估的条件是JavaScript,嵌套标签条件也是如此

input.tabs.vis_tabs == "bar_tab"

?我假设input是一个Input JS对象的实例,tabs是一个字符串属性,当用户选择不同的标签时,它会动态设置。

2 个答案:

答案 0 :(得分:1)

以下是基于@Yu Chen回答的非HTML专家(比如我:D)的完整示例:

    .GroupBy(b => b)
    .Select(grouped => new GroupedObj { B = grouped.Key.b});

答案 1 :(得分:0)

我从一个有用的SO用户评论中找到了它。首先,我的条件声明中有一个拼写错误:

condition = "input.vis_tabs" == "bar_tab",

需要

condition = "input.vis_tabs == 'bar_tab'"

从那里,所有tabsetPanel值都可以直接从input引用(它们只需要一个唯一的id):

  conditionalPanel(
    condition = "input.vis_tabs == 'bar_tab' && input.tabs == 'visualize'",
    checkboxInput("save_data", "Save Data", FALSE)
  )

您需要确保将这两个条件评估为TRUE,否则如果bar_tab是第一个嵌套选项卡,则默认情况下会自动选中它。您希望仅在选择了适当的第一级选项卡和第二级选项卡时弹出条件面板。