我有一个包含40000行和9个列的A矩阵和一个包含40000个项目的矢量B. B中的每个项目都是1到9之间的数字。我想将A中的特定列分配给B中的项目1。 现在,我正在使用for循环。
for(r in 1:40000){
A[r,B[r]]=1
}
但有没有办法对其进行矢量化? 感谢
答案 0 :(得分:2)
你可以尝试
A[cbind(1:nrow(A), B)] <- 1
使用OP代码检查结果
for(r in 1:nrow(A1)){
A1[r, B[r]] <- 1
}
identical(A, A1)
#[1] TRUE
这里我们使用我们用cbind
创建的矩阵。来自?"["
:
当通过[单个参数索引数组时] i可以是具有与x的维度一样多的列的矩阵;结果是一个向量,其元素对应于i的每一行中的索引集。
set.seed(24)
A <- matrix(sample(1:40, 25*9, replace=TRUE), ncol=9)
B <- sample(1:9, 25, replace=TRUE)
A1 <- A