提问人:JohnBones JohnBones 提问时间:11/22/2022 最后编辑:MrFlickJohnBones JohnBones 更新时间:11/22/2022 访问量:107
在 R/Shiny 中,如何使用 purrr::map 创建其他面板
In R/Shiny how to create others panels with purrr::map
问:
这是我的代码。
为什么不工作?
我想我应该使用,但我不知道怎么做。
输出应为前 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)
答:
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 构造中执行循环是行不通的。有关一种方法的完整演示,请参阅此处(使用与 具有相同的输出)。lapply
map
评论
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
哈哈,你给积分真是太好了!很高兴最后一切都解决了,你有一个很好的解决方案。
评论