在R中用另一个列表替换列表的值

4

a、b和c是一个列表。

a<-list(c(6,5,7),c(1,2),c(1,3,4))
b<-list(c(1,2,3),c(4,5),c(6,7,8))
c<-list(1,2,2)

我想要在位置“c”将列表中的“a”替换为“b”。
预期结果如下:
[[1]]
[1] 1 5 7

[[2]]
[1] 1 5

[[3]]
[1] 1 7 4

感谢您的帮助!

1
你能详细说明一下你的替换逻辑吗? - Tim Biegeleisen
5
Map(\[<-`, a, c, Map('[[', b, c))` - rawr
列表"c"是位置的指示器,它包含3个对象:1、2和2。它们代表"a"和"b"中每个对象中替换元素的位置。也就是说,"a"中第一个对象的第一个元素(6)将被"b"中第一个对象的第一个元素(1)替换,"a"中第二个对象的第二个元素(2)将被"b"中第二个对象的第二个元素(5)替换,"a"中第三个对象的第二个元素(3)将被"b"中第三个对象的第二个元素(7)替换。 - lightsnail
2个回答

8
看起来您正在寻找可以同时迭代所有列表的Map
Map(function(a,b,c) {a[c]<-b[c]; a},a,b,c)
# [[1]]
# [1] 1 5 7
#
# [[2]]
# [1] 1 5
#
# [[3]]
# [1] 1 7 4

0

对于 R 的新手来说,发现 Map 的语法令人望而生畏:

for(i in seq(c)){
  a[[i]][unlist(c[i])] <- b[[i]][unlist(c[i])]
}
a

# [[1]]
# [1] 1 5 7
#
# [[2]]
# [1] 1 5
#
# [[3]]
# [1] 1 7 4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接