如何按名称模式合并多个R语言列表为单一长列表?
批量合并带统一命名模式的R向量
你可以通过以下两种方法实现批量合并:
方法1:使用do.call() + c()
mget(ls(pattern = "list"))会返回一个包含所有目标向量的列表,用do.call(c, ...)可以将列表中的所有向量逐个传入c()函数完成合并:
# 精确匹配以list开头、后跟数字的对象(避免误匹配其他含list的变量) all.lists <- do.call(c, mget(ls(pattern = "^list\\d+$")))
方法2:使用unlist()
unlist()可以直接扁平化列表结构,将嵌套的向量合并为一个长向量;若不需要保留原向量的名称,可添加use.names = FALSE参数:
all.lists <- unlist(mget(ls(pattern = "^list\\d+$")), use.names = FALSE)
验证结果
执行后查看合并结果的结构:
str(all.lists) # 输出: chr [1:14] "aaa" "bbb" "ccc" "ddd" "eee" "fff" "ggg" "hhh" "iii" "jjj" "kkk" "lll" "mmm" "nnn"
说明之前方法的问题
c(mget(...))仅将多个子列表合并为一个大列表,并未合并列表内的向量元素;ls(pattern = "list")返回的是对象名称的字符串,而非对象本身,因此list.append得到的只是名称集合,不是实际的向量内容。
内容的提问来源于stack exchange,提问作者Nereus
相关产品推荐
相关产品推荐

