Случайно заполнить столбцы матрицы, используя вектор в R - PullRequest
0 голосов
/ 12 июня 2018

Мне нужно заполнить приведенную ниже матрицу по столбцам случайным выбором значений, содержащихся в переменной hub.

hub <- c(1) # there can be only one '1' per column.
for(i in 1:(49)){
  no <- 0
  hub <- c(hub,no)
}

matriz_hubs <- matrix(data = sample(hub),nrow = 50,ncol = hub_total,byrow = FALSE)

Хотя этот код работает, он помещает все значения '1'в том же ряду.Есть ли способ случайного выбора значений для каждого столбца?

1 Ответ

0 голосов
/ 12 июня 2018

Попробуйте это:

set.seed(1)
mat <- do.call("cbind", lapply(1:5, function(x) sample(c(1, rep(0, 49)), 50)))

> mat
      [,1] [,2] [,3] [,4] [,5]
 [1,]    0    0    0    0    0
 [2,]    0    0    0    0    0
 [3,]    0    0    0    0    0
 [4,]    0    0    0    0    0
 [5,]    0    0    0    0    0
 [6,]    0    0    0    0    0
 [7,]    0    0    0    0    0
 [8,]    0    0    0    0    0
 [9,]    0    0    0    0    0
[10,]    0    0    0    0    0
[11,]    0    0    0    0    0
[12,]    0    0    0    0    0
[13,]    0    0    0    0    0
[14,]    0    0    0    0    0
[15,]    0    0    0    0    0
[16,]    0    0    1    0    0
[17,]    0    0    0    0    0
[18,]    0    0    0    0    0
[19,]    0    0    0    0    0
[20,]    0    0    0    0    0
[21,]    0    0    0    0    0
[22,]    0    0    0    0    0
[23,]    0    0    0    0    0
[24,]    0    0    0    0    0
[25,]    0    0    0    0    0
[26,]    0    0    0    0    0
[27,]    1    0    0    0    0
[28,]    0    0    0    0    0
[29,]    0    0    0    0    0
[30,]    0    0    0    0    0
[31,]    0    0    0    0    0
[32,]    0    0    0    0    0
[33,]    0    0    0    0    0
[34,]    0    0    0    0    0
[35,]    0    0    0    0    0
[36,]    0    0    0    0    0
[37,]    0    0    0    0    0
[38,]    0    0    0    0    0
[39,]    0    0    0    0    0
[40,]    0    0    0    0    0
[41,]    0    0    0    0    0
[42,]    0    1    0    0    0
[43,]    0    0    0    1    0
[44,]    0    0    0    0    1
[45,]    0    0    0    0    0
[46,]    0    0    0    0    0
[47,]    0    0    0    0    0
[48,]    0    0    0    0    0
[49,]    0    0    0    0    0
[50,]    0    0    0    0    0

Вы можете выбрать больше или меньше столбцов, изменив 5 в 1:5 в lapply на желаемое значение.

Вы можетедаже написать функцию:

BUILDMAT <- function(nrow, ncol){
  mat <- do.call("cbind", lapply(1:ncol, function(x) sample(c(1, rep(0, nrow-1)), nrow)))
  return(mat)
}

Теперь просто вызовите ее так:

test <- BUILDMAT(10, 5)

> test
      [,1] [,2] [,3] [,4] [,5]
 [1,]    0    0    1    1    0
 [2,]    0    0    0    0    0
 [3,]    0    0    0    0    0
 [4,]    0    0    0    0    0
 [5,]    0    0    0    0    0
 [6,]    1    1    0    0    0
 [7,]    0    0    0    0    1
 [8,]    0    0    0    0    0
 [9,]    0    0    0    0    0
[10,]    0    0    0    0    0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...