在R语言中根据向量元素提取列表(字典)对应值的方法
解决R语言中list(字典)多元素索引返回向量的问题
当你用R的list存储键值对时,直接用多元素向量索引会得到子list而非字符向量,以下是几种快速得到预期结果的方法:
方法1:用unlist()转换子list为向量
category <- list( 'one' = 'AA', 'two' = 'BB', 'three' = 'CC', 'four' = 'DD') a <- c('three','two') # 提取对应元素并转为向量 result <- unlist(category[a]) # 若不需要保留原名称,用unname()处理 unname(result) # 输出:[1] "CC" "BB"
方法2:循环提取单个元素(无需额外包)
利用sapply遍历向量a,用双括号[[逐个提取list元素:
result <- sapply(a, function(x) category[[x]]) unname(result) # 输出:[1] "CC" "BB"
方法3:先将list转为命名向量
如果后续需要多次索引,先把list转成命名向量会更方便:
category_vec <- unlist(category) # 直接索引即可得到向量 unname(category_vec[a]) # 输出:[1] "CC" "BB"
原理说明
- R中list的单括号
[索引始终返回list类型,哪怕只提取一个元素; - 双括号
[[只能提取单个元素,因此多元素时需要结合循环或转换操作得到向量结果。
内容的提问来源于stack exchange,提问作者ting_H
相关产品推荐
相关产品推荐

