【发布时间】:2017-01-26 06:13:53
【问题描述】:
我想用另一个值替换矩阵A 中的某些值:在这种情况下是1。对于A 的第 j 列,需要替换的行索引是B 的第 j 列中的行索引。下面我举个例子,赋值是通过for循环实现的。
我的问题是:如何更简单、更高效和/或不使用 for 循环来实现此分配?
set.seed(4521)
n <- 10
p <- 5
A <- matrix(rep(NaN,n*p),n,p)
B <- replicate(p, sample(n))
B <- B[1:5,]
for (j in 1:n){
A[B[,j],j] <- 1
}
print(B)
print(A)
B:
[,1] [,2] [,3] [,4] [,5]
[1,] 5 10 7 6 5
[2,] 10 2 9 9 2
[3,] 7 9 3 10 4
[4,] 9 4 1 3 3
[5,] 4 8 6 4 9
A:
[,1] [,2] [,3] [,4] [,5]
[1,] NaN NaN 1 NaN NaN
[2,] NaN 1 NaN NaN 1
[3,] NaN NaN 1 1 1
[4,] 1 1 NaN 1 1
[5,] 1 NaN NaN NaN 1
[6,] NaN NaN 1 1 NaN
[7,] 1 NaN 1 NaN NaN
[8,] NaN 1 NaN NaN NaN
[9,] 1 1 1 1 1
[10,] 1 1 NaN 1 NaN
【问题讨论】:
标签: r for-loop matrix vectorization assign