如何基于映射关系替换R语言列表中的元素?
R列表元素按映射替换的实现方法
你可以利用R中命名向量的索引特性直接完成替换,不需要用replace()或modifyList(),具体步骤如下:
原始代码
list1 <- as.list(c('a', 'b', 'c', 'd', 'e', 'f')) new_val <- c('c'=1,'e'=2,'d'=3,'b'=4,'f'=5,'a'=6)
解决方案
因为new_val是命名向量,我们可以先把列表list1转为字符向量(用unlist()),再用这个向量作为索引去取new_val中对应的值,就能得到预期结果:
# 直接映射取值,结果带元素命名 list3 <- new_val[unlist(list1)] # 如果需要去掉元素名称,用unname()处理 list3 <- unname(new_val[unlist(list1)])
运行后list3的结果就是:
[1] 6 4 1 3 2 5
为什么之前的方法不适用
replace()函数需要指定替换的位置或条件匹配,更适合针对特定位置/值的局部替换,不适用这种全局按映射关系替换的场景。modifyList()的作用是修改列表的元素名称或者替换列表中同名的元素项,无法实现按元素内容的映射替换。
内容的提问来源于stack exchange,提问作者Carpa
相关产品推荐
相关产品推荐

