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
相关产品推荐
相关产品推荐

