首页 > 解决方案 > 在 R 中创建矩阵的更有效的代码

问题描述

我想构建一个矩阵,其中行的第一列是从 1 到 3 的随机值,第二列是从 1 到 4 的随机值,列号为 tm-3。我创建了以下代码来用随机数填充矩阵

tm <- 10
A <- matrix(0, 5, 23)
for(i in 1:5){
  for(j in 1:c(tm-3)){
    A[i,j] <- sample(1:c(j+2), 1, replace = T)
  }
}
A[ ,-c(1:c(tm-3))] <- sample(1:tm, 16, replace = T)

这段代码当然可以正常工作,但是当出现大矩阵时,双循环会减慢整个程序的速度。

是否可以根据上述公式摆脱双精度并用随机数填充前几列?

标签: rmatrix

解决方案


这是一种替换双循环的方法:

sapply(1:(tm-3), function(x) {sample(1:(x+2), 5, replace = TRUE)})

# example output
#      [,1] [,2] [,3] [,4] [,5] [,6] [,7]
# [1,]    1    1    5    3    3    5    5
# [2,]    2    1    1    1    4    5    2
# [3,]    1    1    3    5    1    1    6
# [4,]    2    1    3    1    7    6    9
# [5,]    2    4    1    1    7    3    8

推荐阅读