#r #for-loop
#r #для цикла
Вопрос:
Я хотел бы использовать равномерное распределение, чтобы случайным образом присвоить значение 1 или 2 для пяти групп (сгенерировать 5 случайных равномерных распределений), при этом каждая группа содержит 10 выборок.
Я пытаюсь написать:
for(i in 1:5){
rf <- runif(10)
result[rf<=0.5]=1
result[rf>0.5]=2
}
Однако это заменит ранее назначенные значения, когда цикл продолжится.
Код выдает только 10 результатов:
1 2 1 2 2 1 1 1 2 1
Но я хочу, чтобы в общей сложности было 50 рандомизированных значений:
1 2 1 2 ...... 2 1 1
Как это сделать? Спасибо
Комментарии:
1. основываясь на вашем описании, я не уверен, хотите ли вы
(runif(50) > 0.5) 1
илиreplicate(5, (runif(10) > 0.5) 1)
2. Если у вас закончился цикл for
i
, и вы не используетеi
внутри цикла for, это обычно показатель того, что что-то не так.3. Я бы также отметил, что вы можете выполнять выборку из 1 и 2 напрямую, а не полагаться на a
runif
и a отсечение —sample(1:2, size = 50, replace = TRUE)
Ответ №1:
Поскольку вы работаете со случайным числом, генерируемым из одного и того же распределения каждый раз, вы можете лучше генерировать 50 чисел за один раз и присваивать значение с помощью ifelse
функции.
Попробуйте это:
a <- ifelse(runif(50) <= 0.5, 1, 2)
dim(a) <- c(10,5) #if result in matrix
Ответ №2:
Чтобы добавить к совету Грегора Томаса, sample...
вы также можете скрыть поток в матрицу из 5 столбцов (групп) по 10.
nums <- sample(1:2, 50, replace = TRUE)
groups <- matrix(nums, ncol = 5)