R Shiny – 将tabPaneldynamic添加到tabsetPanel(使用renderUI)
我正在开发一个shiny的应用程序,我使用tabsetPanel
,这是用户input一些特定的input时生成的。 因此,我想使用renderUI
函数使tabsetPanel出现/消失。
我现在的挣扎是tabPanel
元素( tabsetPanel
参数)的数量也取决于用户input ,方式:有时我需要1个,其他时候我想要更多的tabPanels
。
如何做到这一点? 我尝试了包括conditionPanel
或在tabsetPanel
参数中包含简单的if()...
条件,但它(而不是奇怪…)没有工作。
干得好。 代码是相当自我解释。
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) }) } ))
有一种方法可以在不使用 renderUI的情况下dynamic添加tabPanel,这可能不如使用renderUI的版本那么明显。 我写了一个函数addTabToTabset ,它将任何(列表)tabPanel(s)追加到一个标签集/导航栏。
与使用renderUI 相比 ,这种方法具有一系列优势 :
- 每次添加新面板时,现有的tabPanel不会重新渲染。 (更快)
- 因此,不要重置现有面板中的所有inputvariables。 (不需要variables存储变通办法)
- 面板内容的结构可以单独select。 (在lapply – renderUI版本中,所有的面板都必须有点统一。)
解决scheme和代码示例可以在这里find答案。 如果有要求,我也可以在这里发布代码。