Здесь мы создаем функцию foo
, которая создает случайный вектор из 0 и 1 с только одной 1 и той же длиной, что и число столбцов требуемой матрицы. Затем скопируйте эти nrows.
nr <- 6; nc <- 5
foo <- function() sample(c(1, rep(0, nc-1)), nc)
t(replicate(nr, foo()))
Edit : случайное присвоение одного 1
каждой строке и одного 1
каждому столбцу означает, что матрица должна быть квадрат . И один из способов сделать это - использовать функцию sparseMatrix
из пакета Matrix.
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,] . . . |
Здесь |
представляют ненулевые значения (ИСТИНА).
Приведенную выше матрицу 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