如何调整R中unlist的use.names生成的命名结构为子列表_上层列表格式
嵌套列表扁平化并自定义元素命名格式
首先定义示例嵌套列表:
setoflists <- list(first.list = list(letter.a=1, letter.b=2, letter.c=3), second.list = list(letter.d=4, letter.e=5, letter.f=6))
默认调用unlist会生成「上层列表名.子列表元素名」格式的命名,无法满足需求。要得到「子列表元素名_上层列表名」的命名格式,可使用以下两种实现方式:
方法一:基础R原生实现
通过遍历每个上层列表,修改子元素名称后合并为单一列表:
newlist <- unlist(lapply(names(setoflists), function(top_name) { sub_list <- setoflists[[top_name]] # 重命名子列表元素为「子元素名_上层列表名」格式 names(sub_list) <- paste0(names(sub_list), "_", top_name) sub_list }), recursive = FALSE)
验证命名格式:
names(newlist) # 输出结果: # [1] "letter.a_first.list" "letter.b_first.list" "letter.c_first.list" # [4] "letter.d_second.list" "letter.e_second.list" "letter.f_second.list"
方法二:使用purrr包简化代码
若习惯使用tidyverse工具集,可借助imap函数同时获取子列表和对应的上层名称,代码更简洁直观:
library(purrr) newlist <- imap(setoflists, ~{ names(.x) <- paste0(names(.x), "_", .y) .x }) %>% unlist(recursive = FALSE)
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

