Tem dois probleminhas com o seu código: o primeiro é que você não declarou o id do tabsetPanel() e o segundo é que você está passando uma lista para uma função que recebe dots (os três pontinhos).
Essa questão do dots é meio sutil… É só pensar no mutate(): você faz mutate(coluna = x, coluna2 = y), não mutate(list(coluna = x, coluna2 = y)). No seu código, você está executando algo parecido com o segundo caso, passando a lista que sai do map() para a função tabsetPanel(). Se você quiser converter uma função que recebe dots para uma função que recebe uma lista, você pode usar purrr::lift_dl() como no código abaixo.
library(purrr)
library(shiny)
# Faz o lift e já preenche o ID do painel
liftTabsetPanel <- lift_dl(tabsetPanel, id = 'one')
ui <- fluidPage(
liftTabsetPanel(map(1:3, ~ tabPanel(paste0("panel_",.x))))
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
A do.call() funciona de um modo muito parecido com a lift_dl(): a primeira recebe uma função e aplica ela a uma lista de argumentos, enquanto a segunda cria uma nova função que é capaz de lidar diretamente com uma lista de argumentos. As vantagens de usar a lift_dl() são a possibilidade de pré-preencher argumentos na hora de fazer o lift (como eu fiz com id) e o fato de ela ter várias irmãs que funcionam de um jeito muito parecido.