R Shiny - 将tabPanel动态添加到tabsetPanel(使用renderUI)

Posted

技术标签:

【中文标题】R Shiny - 将tabPanel动态添加到tabsetPanel(使用renderUI)【英文标题】:R Shiny - add tabPanel to tabsetPanel dynamically (with the use of renderUI) 【发布时间】:2013-10-28 12:33:00 【问题描述】:

我正在开发一个闪亮的应用程序,我在其中使用tabsetPanel,它是在用户输入某些特定输入时生成的。因此,我想使用renderUI 函数使tabsetPanel 出现/消失。

我现在的问题是 number of tabPanel 元素(tabsetPanel 的参数)也取决于用户输入,顺便说一下:有时我需要 1 个,其他时候我想要更多tabPanels

如何制作?我尝试在 tabsetPanel 参数中包含 conditionPanel 或包含简单的 if()... 条件,但它(并不奇怪......)不起作用。

【问题讨论】:

【参考方案1】:

给你。该代码是相当不言自明的。

library(shiny)
runApp(list(
  ui = pageWithSidebar(
    headerPanel('Dynamic Tabs'),
    sidebarPanel(
      numericInput("nTabs", 'No. of Tabs', 5)
    ),
    mainPanel(
      uiOutput('mytabs')  
    )
  ),
  server = function(input, output, session)
    output$mytabs = renderUI(
      nTabs = input$nTabs
      myTabs = lapply(paste('Tab', 1: nTabs), tabPanel)
      do.call(tabsetPanel, myTabs)
    )
  
))

【讨论】:

Ramnath,这让我很开心,效果很好!非常感谢!! 很高兴能提供帮助。如果您对代码本身有任何疑问,请在此处发布。 添加:添加选项卡后,将相同的uiOutput 添加到所有选项卡但使每个选项卡中的值唯一的正确方法是什么?或者这有什么不同?如果您添加 output$base_tab_ui 并在每个选项卡中呈现它们,则它们都为每个选项卡保留相同的 input$value。有没有办法通过不同的输入变量名称使这些唯一? @Ramnath 您将如何使用自己的内容填充这些动态选项卡中的每一个?也许,比如说,一个 data.frame 的 renderTable / tableOutput 可以使用我用来填充选项卡名称的相同对象进行过滤(即nTabs = length(lags_7)myTabs = lapply(sprintf('%s', lags_7), tabPanel))(此处可能的答案:***.com/questions/39276104/…) @d8aninja,假设您将一些地块添加到名为 myPlots 的列表中,您可以这样做:nTabs = length(myPlots); myTabs = lapply(1:nTabs, function(x)tabPanel(paste0("Tab ",x), renderPlot(myPlots[[x]]))); do.call(tabsetPanel, myTabs)【参考方案2】:

有一种方法可以动态添加tabPanels 没有 renderUI,这可能不像带有renderUI 的版本那么明显。我编写了一个函数 addTabToTabset ,它将任何(列表)tabPanel 附加到选项卡集/导航栏。

与使用 renderUI 相比,此方法具有一组优点

现有的 tabPanel 不会在每次添加新面板时重新呈现。 (更快) 因此,不会重置现有面板中的所有输入变量。 (无需变量存储解决方法) 可以单独选择面板内容的结构。 (在 lapply - renderUI 版本中,所有面板都必须有点统一。)

解决方案和代码示例可以在答案here中找到。如果需要,我也可以在此处发布代码。

【讨论】:

以上是关于R Shiny - 将tabPanel动态添加到tabsetPanel(使用renderUI)的主要内容,如果未能解决你的问题,请参考以下文章

通过导航到 navbarPage 中的特定 tabPanel 触发 R Shiny 反应式

R Shiny:如何将数据表添加到动态创建的选项卡

PrimeNG - 如何在 p-tabView 组件中动态添加和删除 p-tabPanel

外部链接到 Shiny App 中的特定 tabPanel

ASP.NET动态增加TabPanel

在 plotly r shiny 应用程序中动态添加跟踪