我有一份清单清单,如下:
my_list = list(list(a=1,b=2),list(a=1,b=2),list(a=1,b=2))
我有一个矢量b_new,其长度与length(my_list)
完全相同:
b_new = c(3,4,5)
我想用b中的值顺序覆盖my_list的b元素,因此预期输出为:
my_list = list(list(a=1,b=3),list(a=1,b=4),list(a=1,b=5))
我显然可以在for循环中执行此操作:
for(i in 1:length(b_new))
{
my_list[[i]]$b=b_new[i]
}
但我想知道是否有一种没有for循环的方法,例如使用mapply?
答案 0 :(得分:2)
它仍然是一个循环,但以下将会这样做:
Map(`[<-`, my_list, "b", b_new)
# or more pleasantly named:
Map(replace, my_list, "b", b_new)
str(Map(`[<-`, my_list, "b", b_new))
#List of 3
# $ :List of 2
# ..$ a: num 1
# ..$ b: num 3
# $ :List of 2
# ..$ a: num 1
# ..$ b: num 4
# $ :List of 2
# ..$ a: num 1
# ..$ b: num 5