Двойной цикл со случайной выборкой - PullRequest
0 голосов
/ 30 сентября 2011

Я хотел создать счет i (0:36) с частотой j.Я хотел, чтобы j цикл был случайными числами.Что я сделал:

j<-1:70
for(i in 0:36) {
  for (j in 1:sample(j)) {
    print(i,j)
  }
}

Но я получил ошибку.Должен ли я поставить sample(j,1, replacement=TRUE) вместо sample(j)?спасибо

Ответы [ 3 ]

2 голосов
/ 30 сентября 2011

Если я правильно понимаю, вы хотите, чтобы каждый элемент в i реплицировался от одного до 70 раз (случайным образом выбирая количество копий значения).

i <- 0:36
j <- 1:70

#number of times to replicate each i
times <- sample(j, length(i), replace=FALSE)
result <- rep(i, times)

Использовать ли заменить = ЛОЖЬ или нет, зависит от того, как вы хотите сделать выборку (например, замена = ЛОЖЬ гарантирует, что каждый j выбран не более одного раза.

2 голосов
/ 30 сентября 2011

Если вы хотите случайное число, вы должны использовать runif.Он имеет мин / макс для контроля диапазона.Вы также можете использовать sample, но тогда лучше использовать sample.int(max, 1)

j<-70
for(i in 0:36) {
  for (k in 1:runif(1,1,j)) {
    cat(i,k, "\n")
  }
}

Тогда внутренний цикл не должен перезаписывать j (который должен быть константой) - поэтому я переименовал циклпеременная к k.... и print не печатает несколько аргументов, как это - но cat делает!

1 голос
/ 30 сентября 2011

Попробуйте

for(i in 0:36) {
  for(k in 1:sample(70, 1)) {
    print(c(i,k))
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...