这里我们创建一个函数,foo,它创建一个由 0 和 1 组成的随机向量,其中只有一个 1,并且长度与所需矩阵的列数相同。然后,复制此行。
nr <- 6; nc <- 5
foo <- function() sample(c(1, rep(0, nc-1)), nc)
t(replicate(nr, foo()))
编辑:将1 随机分配给每一行,将1 分配给每一列意味着矩阵需要是正方形。一种方法是使用 Matrix 包中的 sparseMatrix 函数。
library(Matrix)
args(sparseMatrix)
# function (i = ep, j = ep, p, x, dims, dimnames, symmetric = FALSE,
# triangular = FALSE, index1 = TRUE, giveCsparse = TRUE, check = TRUE,
# use.last.ij = FALSE)
i 和 j 指定矩阵的非零条目的位置。所以我们可以使用sample(1:n) 指定这些,其中n 是方阵的行数和列数。
set.seed(1234) # For reproducibility. Omit in reality.
A <- sparseMatrix(i=sample(1:4), j=sample(1:4))
# 4 x 4 sparse Matrix of class "ngCMatrix"
# [1,] . | . .
# [2,] . . | .
# [3,] | . . .
# [4,] . . . |
这里的| 代表非零值 (TRUE)。
上面的矩阵A可以使用as.matrix转换成二进制矩阵。
as.matrix(A) * 1
[,1] [,2] [,3] [,4]
[1,] 0 1 0 0
[2,] 0 0 1 0
[3,] 1 0 0 0
[4,] 0 0 0 1