You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shiny模块中使用purrr::map()生成标签面板失效问题排查

解决Shiny模块中purrr::map生成tabBox标签失效的问题

问题根源

手动编写时,你给tagList()传入了5个独立的list()对象,这些会被tagList正确识别为多个子元素,进而被tabBox的tabs参数正常解析。但用purrr::map()时,map()返回的是一个包裹着5个list的大列表,此时tagList()只把这个大列表当成了单个子元素,tabBox无法识别这种嵌套结构,自然生成不了标签面板。

修复方案

需要把map()生成的列表拆解开,让tagList()把每个内部的list都作为独立参数传入,有两种简单方法:

方法1:用rlang::!!!展开列表(需加载rlang包)

修改模块UI函数:

library(semantic.dashboard)
library(purrr)
library(rlang)

example_UI <- function(id) {
  ns <- NS(id)
  tagList(
    !!!(1:5 %>% map(~ list(menu = list(paste0(.x)),
                           content = list(paste0(.x)))))
  )
}

方法2:用do.call()调用tagList(无需额外包)

直接将map的结果作为参数集传递给tagList:

library(semantic.dashboard)
library(purrr)

example_UI <- function(id) {
  ns <- NS(id)
  do.call(tagList, 
          1:5 %>% map(~ list(menu = list(paste0(.x)),
                             content = list(paste0(.x)))))
}

两种方法最终都会让tagList输出和手动编写完全一致的结构,tabBox就能正确解析tabs参数生成对应的标签面板了。

内容的提问来源于stack exchange,提问作者JohnBones JohnBones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:05:42