R语言:如何从列表的列表中提取子列表名称
解决方法
问题的核心是你当前创建的all_lists并没有给子列表设置名称,所以无法直接提取"list1"这类标识。以下是两种简洁的处理方式:
方式一:创建带名称的列表(推荐)
如果你还没创建all_lists,可以用mget直接从环境中提取变量并自动保留名称:
# 手动指定变量名 all_lists <- mget(c("list1", "list2", "list3")) # 如果变量有统一命名规则(比如都以"list"开头),可以自动匹配 var_names <- ls(pattern = "^list") all_lists <- mget(var_names)
之后直接用names(all_lists)就能获取所有子列表的名称(比如"list1"、"list2"),生成表格只需要把这个结果转换为数据框即可:
name_table <- data.frame(sublist_name = names(all_lists))
方式二:给已创建的无名称列表补全名称
如果已经创建了无名称的all_lists,可以在创建时通过自定义函数捕获变量名:
# 定义捕获变量名的函数 get_named_lists <- function(...) { args <- match.call()[-1] list_obj <- list(...) names(list_obj) <- sapply(args, deparse) list_obj } # 用该函数创建列表 all_lists <- get_named_lists(list1, list2, list3) # 提取名称 names(all_lists)
为什么你之前的方法无效?
all_lists[[1]]是提取第一个子列表的内容(也就是你的tibble数据),不是它的名称;names(all_lists[[1]])是提取这个tibble的列名,和子列表本身的名称无关。
内容的提问来源于stack exchange,提问作者Vitto
相关产品推荐
相关产品推荐

