R 反复复制相同的选项卡和布局

R 反复复制相同的选项卡和布局,r,shiny,R,Shiny,我正在创建一个应用程序,其中几个输入显示在一个选项卡中。我希望用户能够通过单击一个专用于它的选项卡来生成一个相同的选项卡(具有相同的布局)(通过示例会更清楚)。因此,一个用户可能会创建无限多个相同的选项卡。但是,输入的名称应稍有更改(例如,select1,select2,等等),以便这些新创建的输入可以反应式使用。此外,选项卡应按照单击次数命名。我知道如何做这最后一部分感谢 关于第一部分,我尝试使用模块,因为它们的目的是在一个函数中收集一些代码,以便非常容易地生成输入。但是,在下面的示例中,可以

我正在创建一个应用程序,其中几个输入显示在一个选项卡中。我希望用户能够通过单击一个专用于它的选项卡来生成一个相同的选项卡(具有相同的布局)(通过示例会更清楚)。因此,一个用户可能会创建无限多个相同的选项卡。但是,输入的名称应稍有更改(例如,
select1
select2
,等等),以便这些新创建的输入可以反应式使用。此外,选项卡应按照单击次数命名。我知道如何做这最后一部分感谢

关于第一部分,我尝试使用模块,因为它们的目的是在一个函数中收集一些代码,以便非常容易地生成输入。但是,在下面的示例中,可以启动应用程序,但单击选项卡“更多”无效,而它应该创建一个与第一个选项卡布局相同的新选项卡:

library(shiny)
library(shinyWidgets)

addTab_server <- function(input, output, session, count){
  ns <- session$ns

  observeEvent(input$tabs, {
    if (input$tabs == "More"){
      count(count()+1)
      name <- paste0("Name ", count())
      insertTab(inputId = "tabs",
                tabPanel(title = name,
                         selectInput(ns("select"), 
                                     "Choose", 
                                     choices = colnames(mtcars))
                         ), 
                target = "More", 
                position = "before",
                select = TRUE)
    }
    else {}
  })
}

ui <- navbarPage(position = "static-top",
                 title = "foo",
                 id = "tabs",
                 tabPanel(title = "Name 1",
                          fluidRow(
                            selectInput("select1", 
                                        "Choose", 
                                        choices = colnames(mtcars))
                          )),
                 tabPanel(title = "More",
                          icon = icon("plus"),
                          fluidRow()
                 )
)

server <- function(input, output) {

  callModule(addTab_server, "try", count = reactiveVal(1))

}

shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(shinyWidgets)

addTab_server这是一个没有模块的版本,可以回答您的问题。如果您仍想使用模块,我建议您查看此应用程序:

库(闪亮)
图书馆(shinyWidgets)

ui这是一个没有模块的版本,可以回答您的问题。如果您仍想使用模块,我建议您查看此应用程序:

库(闪亮)
图书馆(shinyWidgets)

ui这是模块答案,我在每个选项卡上添加了一个表

library(shiny)
library(shinyWidgets)
library(dplyr)

addTab <- function(id) {
  ns <- NS(id)
  tagList(
    selectInput(ns("select"),
                "Choose", 
                choices = colnames(mtcars)),
    tableOutput(ns("table"))
    )
}

moduleTable <- function(input, output, session){
  output$table <- renderTable({
    select(mtcars, input$select)
  })
}

ui <- navbarPage(position = "static-top",
                 title = "foo",
                 id = "tabs",
                 tabPanel(title = "More",
                          icon = icon("plus"),
                          fluidRow()
                 )
)

server <- function(input, output) {

  count <- reactiveValues(val=1)

  observeEvent(input$tabs, {
    if (input$tabs == "More"){
      name <- paste0("Name ", count$val)
      insertTab(inputId = "tabs",
                tabPanel(title = name,
                         addTab(paste0("select", count$val))
                         ), 
                target = "More", 
                position = "before",
                select = TRUE)

      callModule(moduleTable, paste0("select", count$val))
      count$val <- count$val+1
    }
  })  
}

shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(shinyWidgets)
图书馆(dplyr)

addTab这是模块答案,我在每个选项卡上添加了一个表

library(shiny)
library(shinyWidgets)
library(dplyr)

addTab <- function(id) {
  ns <- NS(id)
  tagList(
    selectInput(ns("select"),
                "Choose", 
                choices = colnames(mtcars)),
    tableOutput(ns("table"))
    )
}

moduleTable <- function(input, output, session){
  output$table <- renderTable({
    select(mtcars, input$select)
  })
}

ui <- navbarPage(position = "static-top",
                 title = "foo",
                 id = "tabs",
                 tabPanel(title = "More",
                          icon = icon("plus"),
                          fluidRow()
                 )
)

server <- function(input, output) {

  count <- reactiveValues(val=1)

  observeEvent(input$tabs, {
    if (input$tabs == "More"){
      name <- paste0("Name ", count$val)
      insertTab(inputId = "tabs",
                tabPanel(title = name,
                         addTab(paste0("select", count$val))
                         ), 
                target = "More", 
                position = "before",
                select = TRUE)

      callModule(moduleTable, paste0("select", count$val))
      count$val <- count$val+1
    }
  })  
}

shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(shinyWidgets)
图书馆(dplyr)

addTab我更喜欢有模块的解决方案,但这也行得通,所以向上投票,但不是解决方案。你提供的链接非常有趣,谢谢,洛蒂更喜欢有模块的解决方案,但这也很有效,所以向上投票,但不是解决方案。你提供的链接很有趣,非常感谢