Образец для цикла R - PullRequest
       23

Образец для цикла R

0 голосов
/ 09 мая 2018

Я бы хотел сделать выборку без замены из MU, MG, PU, ​​PG 70 раз, чтобы создать матрицу (ncol = 4, nrow = 70) например,

sample(c("MU","MG","PU","PG"), 4,F)
sample(c("MU","MG","PU","PG"), 4,F)
sample(c("MU","MG","PU","PG"), 4,F)
sample(c("MU","MG","PU","PG"), 4,F)
sample(c("MU","MG","PU","PG"), 4,F)
#etc

Пока у меня есть: матрица (выборка (c ("MU", "MG", "PU", "PG"), 70 * 4, F), nrow = 70, byrow = TRUE), что неверно, поскольку строки могут иметь более на всякий случай каждый из MU, MG, PU, ​​PG. Могу ли я сделать это с помощью цикла for или что-то более простое?

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Быстрое решение будет цикл:

mat <- matrix(NA_character_, nrow = 70, ncol = 4)
for (i in 1:70) {
  mat[i, ] <- sample(c("MU","MG","PU","PG"), 4, replace = FALSE)
}

А для аллергиков на петли:

t(sapply(1:70, function(x) sample(c("MU","MG","PU","PG"), 4, replace = FALSE)))
0 голосов
/ 09 мая 2018

Вы можете попробовать это также:

lyst <- lapply( 1:70, function(x) {set.seed(x); sample(c("PU", "MU", "MG", "PG"), 4, replace=F)})
do.call("rbind", lyst)

Пример некоторых строк в качестве вывода :

 #[,1] [,2] [,3] [,4]
 #[1,] "MU" "PG" "MG" "PU"
 #[2,] "PU" "MG" "MU" "PG"
 #[3,] "PU" "MG" "PG" "MU"
 #[4,] "MG" "PU" "PG" "MU"
 #[5,] "PU" "MG" "MU" "PG"
0 голосов
/ 09 мая 2018

Возможно, вам нужна функция replicate. Я сделаю только 10 повторов, чтобы не переполнить экран.

> sample(c("MU","MG","PU","PG"), 4,F)
[1] "MG" "MU" "PU" "PG"
> replicate(10, sample(c("MU","MG","PU","PG"), 4,F))
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] "MG" "PG" "MU" "MU" "PU" "MG" "PU" "MG" "MG" "MU" 
[2,] "PU" "MG" "PU" "PU" "MU" "MU" "MU" "PG" "MU" "PG" 
[3,] "MU" "PU" "MG" "PG" "MG" "PG" "MG" "MU" "PG" "MG" 
[4,] "PG" "MU" "PG" "MG" "PG" "PU" "PG" "PU" "PU" "PU" 
> # Output is transposed from how we would want it so we'll just transpose it back
> t(replicate(10, sample(c("MU","MG","PU","PG"), 4,F)))
      [,1] [,2] [,3] [,4]
 [1,] "MG" "PU" "PG" "MU"
 [2,] "PU" "MG" "MU" "PG"
 [3,] "MG" "MU" "PU" "PG"
 [4,] "PU" "PG" "MU" "MG"
 [5,] "MG" "PU" "PG" "MU"
 [6,] "PU" "PG" "MU" "MG"
 [7,] "PG" "MG" "PU" "MU"
 [8,] "MU" "PU" "MG" "PG"
 [9,] "PG" "MU" "PU" "MG"
[10,] "MU" "MG" "PG" "PU"
...