赋值给具有重复索引的矩阵的子集

Car*_*oft 5 r subset

不确定这是否有资格获得R-Inferno中的条目,但有人可以评论以下替换工作方式背后的逻辑吗?

foo<-matrix(1:6,2)
bar<-foo[2,c(1,3,1)]
bar
# [1] 2 6 2
foo[2,c(1,3,1)]<-foo[2,c(1,3,1)]+5
foo
#      [,1] [,2] [,3]
# [1,]    1    3    5
# [2,]    7    4   11
Run Code Online (Sandbox Code Playgroud)

我的问题是:生成时bar,重复的坐标在输出重复的元素的结果,但修改时foo,重复的坐标并不会导致重复加入操作.(相比之下,for(j in c(1,3,1) ) foo[2,j]<-foo[2,j]+5确实如此).为什么以及如何确切地[<-忽略了重复索引?

Rol*_*and 5

来自help("[<-"):

子分配是按顺序完成的,因此如果多次指定索引,将导致索引的最新分配值.

foo<-matrix(1:6,2)

foo[1,rep(1,2)] <- c(1,42)

#     [,1] [,2] [,3]
#[1,]   42    3    5
#[2,]    2    4    6
Run Code Online (Sandbox Code Playgroud)