将自定义数量的 tabPanels 添加到闪亮仪表板中的 tabsetPanel
Adding custom number of tabPanels to a tabsetPanel in shiny dashboard
我正在尝试根据变量 form
制作一个 tabsetPanel
,其中包含多个 tabPanel
。我试过下面的代码,但出现了一些错误:
Error in attr(x, "selected") <- TRUE :
trying to specify an attribut in a NULL
有人可以帮助我吗?
library(shinydashboard)
library(tidyverse)
form <- 2
ui <- dashboardPage(
title = "Rolê de Aventura", skin="blue",
dashboardHeader(titleWidth = 1024,
title=list(title=tags$img(src="LogoPQ.png",
heigth=45, width=45,
align="left"),
title=tags$p(style="text-align:center;",
"Rolê de Aventura")
)
),
dashboardSidebar(
selectInput("categoria", label = "Categoria:",
choices = list("Quarteto Misto",
"Dupla Masculina",
"Dupla Mista",
"Dupla Feminina"), width="200px"
)
),
dashboardBody(
textInput("equipe", "Nome da equipe:", width = NULL),
tabsetPanel(width = NULL, type = "tabs",
do.call(tabsetPanel,c(width=NULL, type="tabs",
lapply(1:form, function(i) {
tabPanel(title = str_c("Atleta", i),
textInput(str_c("atleta", i), "Nome:", width=NULL),
dateInput(str_c("at.nasc", i), "Nascimento:", width="30%"),
checkboxGroupInput(str_c("at.sex", i), "Sexo:", width="30%",
choices=list("Masculino", "Feminino")))
})
)
)
)
)
)
server <- function(input, output) {
}
shinyApp(ui = ui, server = server)
我似乎无法准确识别您的错误。然而,有一个答案。
我相应地修改了您的代码,它按预期工作。见下文,
library(shinydashboard)
library(tidyverse)
library(shiny)
form <- 2
ui <- dashboardPage(
title = "Rolê de Aventura", skin="blue",
dashboardHeader(titleWidth = 1024,
title=list(title=tags$img(src="LogoPQ.png",
heigth=45, width=45,
align="left"),
title=tags$p(style="text-align:center;",
"Rolê de Aventura")
)
),
dashboardSidebar(
selectInput("categoria", label = "Categoria:",
choices = list("Quarteto Misto",
"Dupla Masculina",
"Dupla Mista",
"Dupla Feminina"), width="200px"
)
),
dashboardBody(
textInput("equipe", "Nome da equipe:", width = NULL),
do.call(
tabsetPanel,
c(
id = "t",
lapply(
1:form,
FUN = function(x) {
tabPanel(
title = paste("tab", x)
)
}
)
)
)
)
)
server <- function(input, output) {
}
shinyApp(ui = ui, server = server)
我发现在这种情况下将 exec()
函数与 !!!
结合使用很有用。
library(shinydashboard)
library(tidyverse)
library(shiny)
form <- 2
#store the ui code in a list to use later.
tabs <- map(1:form, function(i) {
tabPanel(title = str_c("Atleta", i),
textInput(str_c("atleta", i), "Nome:"),
dateInput(str_c("at.nasc", i), "Nascimento:", width="30%"),
checkboxGroupInput(str_c("at.sex", i), "Sexo:", width="30%",
choices=c("Masculino", "Feminino")))
})
ui <- dashboardPage(
title = "Rolê de Aventura", skin="blue",
dashboardHeader(titleWidth = 1024,
title=list(title=tags$img(src="LogoPQ.png",
heigth=45, width=45,
align="left"),
title=tags$p(style="text-align:center;",
"Rolê de Aventura")
)
),
dashboardSidebar(
selectInput("categoria", label = "Categoria:",
choices = list("Quarteto Misto",
"Dupla Masculina",
"Dupla Mista",
"Dupla Feminina"), width="200px"
)
),
dashboardBody(
textInput("equipe", "Nome da equipe:"),
exec(tabsetPanel, !!!tabs))
)
server <- function(input, output) {
}
shinyApp(ui = ui, server = server)
我正在尝试根据变量 form
制作一个 tabsetPanel
,其中包含多个 tabPanel
。我试过下面的代码,但出现了一些错误:
Error in attr(x, "selected") <- TRUE : trying to specify an attribut in a NULL
有人可以帮助我吗?
library(shinydashboard)
library(tidyverse)
form <- 2
ui <- dashboardPage(
title = "Rolê de Aventura", skin="blue",
dashboardHeader(titleWidth = 1024,
title=list(title=tags$img(src="LogoPQ.png",
heigth=45, width=45,
align="left"),
title=tags$p(style="text-align:center;",
"Rolê de Aventura")
)
),
dashboardSidebar(
selectInput("categoria", label = "Categoria:",
choices = list("Quarteto Misto",
"Dupla Masculina",
"Dupla Mista",
"Dupla Feminina"), width="200px"
)
),
dashboardBody(
textInput("equipe", "Nome da equipe:", width = NULL),
tabsetPanel(width = NULL, type = "tabs",
do.call(tabsetPanel,c(width=NULL, type="tabs",
lapply(1:form, function(i) {
tabPanel(title = str_c("Atleta", i),
textInput(str_c("atleta", i), "Nome:", width=NULL),
dateInput(str_c("at.nasc", i), "Nascimento:", width="30%"),
checkboxGroupInput(str_c("at.sex", i), "Sexo:", width="30%",
choices=list("Masculino", "Feminino")))
})
)
)
)
)
)
server <- function(input, output) {
}
shinyApp(ui = ui, server = server)
我似乎无法准确识别您的错误。然而,有一个答案
我相应地修改了您的代码,它按预期工作。见下文,
library(shinydashboard)
library(tidyverse)
library(shiny)
form <- 2
ui <- dashboardPage(
title = "Rolê de Aventura", skin="blue",
dashboardHeader(titleWidth = 1024,
title=list(title=tags$img(src="LogoPQ.png",
heigth=45, width=45,
align="left"),
title=tags$p(style="text-align:center;",
"Rolê de Aventura")
)
),
dashboardSidebar(
selectInput("categoria", label = "Categoria:",
choices = list("Quarteto Misto",
"Dupla Masculina",
"Dupla Mista",
"Dupla Feminina"), width="200px"
)
),
dashboardBody(
textInput("equipe", "Nome da equipe:", width = NULL),
do.call(
tabsetPanel,
c(
id = "t",
lapply(
1:form,
FUN = function(x) {
tabPanel(
title = paste("tab", x)
)
}
)
)
)
)
)
server <- function(input, output) {
}
shinyApp(ui = ui, server = server)
我发现在这种情况下将 exec()
函数与 !!!
结合使用很有用。
library(shinydashboard)
library(tidyverse)
library(shiny)
form <- 2
#store the ui code in a list to use later.
tabs <- map(1:form, function(i) {
tabPanel(title = str_c("Atleta", i),
textInput(str_c("atleta", i), "Nome:"),
dateInput(str_c("at.nasc", i), "Nascimento:", width="30%"),
checkboxGroupInput(str_c("at.sex", i), "Sexo:", width="30%",
choices=c("Masculino", "Feminino")))
})
ui <- dashboardPage(
title = "Rolê de Aventura", skin="blue",
dashboardHeader(titleWidth = 1024,
title=list(title=tags$img(src="LogoPQ.png",
heigth=45, width=45,
align="left"),
title=tags$p(style="text-align:center;",
"Rolê de Aventura")
)
),
dashboardSidebar(
selectInput("categoria", label = "Categoria:",
choices = list("Quarteto Misto",
"Dupla Masculina",
"Dupla Mista",
"Dupla Feminina"), width="200px"
)
),
dashboardBody(
textInput("equipe", "Nome da equipe:"),
exec(tabsetPanel, !!!tabs))
)
server <- function(input, output) {
}
shinyApp(ui = ui, server = server)