如何在R语言中提取嵌套列表中所有同名子元素的向量?
解决方案
嘿,完全不用手动遍历水果名称就能提取所有colour值,这里有两种实用的方法,不管你的fruit列表以后加多少新水果类型都能适用:
方法一:Base R 原生实现
不需要额外安装包,用嵌套的sapply/lapply配合unlist就能搞定:
# 提取所有colour值并转为向量 colour_vector <- unlist(lapply(fruit, sapply, '[[', "colour"), use.names = FALSE)
- 解释:
lapply(fruit, ...)会自动遍历fruit里的每一个子列表(也就是apple、banana、peach这些); - 内层的
sapply(..., '[[', "colour")负责从每个水果下的ID子列表里提取colour值; - 最后
unlist()把嵌套的结果扁平化,use.names = FALSE可以去掉自动生成的名称,只保留纯值向量。
方法二:用purrr包更简洁实现
如果你习惯tidyverse的风格,purrr包的函数会让代码更易读:
library(purrr) # 提取所有colour值并转为字符向量 colour_vector <- fruit %>% map(~ map(., "colour")) %>% # 两层遍历提取colour flatten_chr() # 把嵌套列表转为扁平的字符向量
map(~ map(., "colour"))先遍历每个水果类型,再遍历每个ID子列表提取colour;flatten_chr()直接把嵌套结构转换成字符向量,省去手动unlist的步骤。
验证结果
用你给出的fruit列表测试,两种方法都会得到你想要的向量:
[1] "green" "red" "red" "yellow" "yellow" "yellow" "orange" "orange" "orange"
内容的提问来源于stack exchange,提问作者pvalue
相关产品推荐
相关产品推荐

