R для цикла заменяет предварительно назначенные значения

#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)