【发布时间】:2018-03-02 04:59:58
【问题描述】:
我正在构建一个 R Shiny 网络应用程序来帮助进行数据探索。我有一个带有一行标签的主页,然后是一行子标签:
我希望有一个面板,为用户提供不同的输入来选择以创建不同的图表(例如,选择@ 987654324选项卡时,我希望有一个数据集列的下拉列表,当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 Chart 或 Histogram)。我尝试使用此代码:
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
),
但现在,上述条件面板总是评估为真。这个SO post 是我能找到的最接近答案的,它确实没有太大帮助,因为它专注于显示输出。
我的猜测是,由于二级选项卡是在一级选项卡的范围内定义的,因此它返回的值在“全局”ui.R 或server.R 范围内不可用。但如果是这种情况,我希望 conditionalPanel 始终评估为 false,而它当前评估为始终为 true!
我也知道被评估的条件是在 JavaScript 中,所以嵌套的选项卡条件会是这样的
input.tabs.vis_tabs == "bar_tab"
?我假设input 是一些Input JS 对象的实例,tabs 是一个字符串属性,当用户选择不同的选项卡时会动态设置。
【问题讨论】:
-
condition = "input.vis_tabs" == "bar_tab"包含一个错字 ;) 是否由condition = "input.vis_tabs == 'bar_tab' "解决?否则请提供可重现的示例。 -
@BigDataScientist 想通了。你是对的 - 你还需要评估条件中的第一级和第二级选项卡,因为默认情况下嵌套级别的第一个选项卡被选中。