这是我的代码。
为什么不工作?
我想我应该使用 do.call
但我不知道如何使用。
输出应该是前3个panel和后4个panel,一共7个Panel
有什么帮助吗?
library(shiny)
library(tidyverse)
tabpanel_function <- function(x){
tabPanel(paste0("Panel",x))
}
ui <- fluidPage(
tabsetPanel(
tabPanel("Panela"),
tabPanel("Panelb"),
tabPanel("Panelc"),
1:4 %>% map(~ tabpanel_function(.x))
)
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
最佳答案
可以在服务器函数中调用 appendTab
:
library(shiny)
library(tidyverse)
tabpanel_function <- function(x){
tabPanel(paste0("Panel",x))
}
ui <- fluidPage(
tabsetPanel(id = "x",
tabPanel("Panela"),
tabPanel("Panelb"),
tabPanel("Panelc"),
)
)
server <- function(input, output, session) {
1:4 %>% map(~ tabpanel_function(.x) %>% appendTab("x", .))
}
shinyApp(ui, server)
编辑
我删除了我之前的错误断言,即在 ui 构造中执行循环是行不通的。参见 here一种方法的完整演示(使用 lapply
,其输出与 map
相同)。
关于r - 在 R/Shiny 中如何使用 purrr::map 创建其他面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74532454/