在 R/Shiny 中,如何使用 purrr::map 创建其他面板

In R/Shiny how to create others panels with purrr::map

提问人:JohnBones JohnBones 提问时间:11/22/2022 最后编辑:MrFlickJohnBones JohnBones 更新时间:11/22/2022 访问量:107

问:

这是我的代码。

为什么不工作?

我想我应该使用,但我不知道怎么做。 输出应为前 3 个面板和 4 个面板,共 7 个面板do.call

有什么帮助吗?

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)
r 闪亮

评论

0赞 MrFlick 11/22/2022
请不要在问题本身添加“解决方案”。如果您使用的方法与下面建议的答案不同,请将您的解决方案作为单独的答案发布。然后,社区可以投票选出他们认为最有用的方法,您可以接受您喜欢的任何答案。

答:

2赞 Andy Baxter 11/22/2022 #1

它可以在服务器函数中进行调用: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 构造中执行循环是行不通的。有关一种方法的完整演示,请参阅此处(使用与 具有相同的输出)。lapplymap

评论

1赞 JohnBones JohnBones 11/22/2022
感谢您抽出时间接受采访。在这种情况下,我如何将plotOutput添加到不同的选项卡面板中?
0赞 Andy Baxter 11/22/2022
嗯,很棘手,我想你会想走使用 (shiny.rstudio.com/reference/shiny/latest/insertUI.html) 添加零件的路线。或者考虑对闪亮的应用进行模块化,以重复添加更复杂的内容 (shiny.rstudio.com/articles/modules.html)。insertUI
0赞 Andy Baxter 11/22/2022
抱歉,事实证明我无法从循环创建 UI 元素是完全错误的 - shiny.rstudio.com/gallery/creating-a-ui-from-a-loop.html。将查看您的代码是否有方便的修复程序
1赞 JohnBones JohnBones 11/22/2022
我更新了问题。这是我在这些新面板上包含的图表。我也验证你的答案。再次感谢!
1赞 Andy Baxter 11/22/2022
哈哈,你给积分真是太好了!很高兴最后一切都解决了,你有一个很好的解决方案。