如何在lapply中为flextables使用set_caption设置标题
问题原因与解决方案
你的代码无法正常工作的核心问题是:lapply遍历的是mini列表的元素,但匿名函数里引用的全局变量i是完整的1:2向量,而非对应每个元素的索引,导致每个表格都被错误地分配了整个标题向量,而非单个标题。
以下是两种正确的实现方式:
方法一:通过索引遍历
利用seq_along(mini)生成列表元素的索引,在匿名函数中同时获取对应索引的数据集和标题:
titles = c('airquality', 'mtcars') lapply(seq_along(mini), function(i) { mini[[i]] %>% flextable() %>% set_caption(titles[i]) })
方法二:使用Map函数配对数据与标题
Map可以同时遍历两个列表的对应元素,直接将数据集和对应的标题配对传入函数:
titles = c('airquality', 'mtcars') Map(function(data, title) { data %>% flextable() %>% set_caption(title) }, mini, titles)
如果习惯使用tidyverse工具,也可以用purrr::map2替代Map,用法一致:
library(purrr) titles = c('airquality', 'mtcars') map2(mini, titles, function(data, title) { data %>% flextable() %>% set_caption(title) })
内容的提问来源于stack exchange,提问作者12666727b9
相关产品推荐
相关产品推荐

