Мой цикл While не заканчивается на R, как мне узнать, в чем проблема?

#r #combinations

#r #комбинации

Вопрос:

Я пытаюсь запустить цикл while для фрейма данных с 70 000 строк. Я попробовал свой код на части фрейма данных, и он работает отлично. Но я жду уже 5 минут, и ничего не происходит. Поэтому я считаю, что это из-за большого набора данных. Могу ли я каким-либо образом ускорить этот процесс? Это мой код

 library(arrangements)
assignments <- permutations(c(0,1), 22, freq=c(11,11))
results<- data.frame()


i = 1
 #choose row
while(i < nrow(assignments)){
  Y1_sum = 0
  Y0_sum = 0
# choose columns
  j = 1

  while (j <= 22){
    n = assignments[i, j]
    
    if(n == 1){
      Y1 = potential_outcome[j,4]
      Y1_sum <- Y1_sum   Y1
    } else if(n == 0){
      Y0 = potential_outcome[j, 3]
      Y0_sum <- Y0_sum   Y0
    }
    j <- j   1
  }

  result = abs(Y1_sum/11 - Y0_sum /11)
  results <-  rbind(results, result)
  i <- i   1
}
  

Потенциальным результатом здесь является фрейм данных, который выглядит следующим образом

potential_outcome

введите описание изображения здесь

Ответ №1:

Использование rbind для увеличения фрейма данных внутри цикла — вот что вызывает медлительность. Это создает много вычислительных затрат. Я считаю, что это приведет к результату, который вам нужен:

 # Test data
potential_outcomes <- data.frame(Yi.0 = replicate(22, runif(1, 1, 15)),
                                 Yi.1 = replicate(22, runif(1, 1, 15)))

# If n == 1
Y1 <- assignments %*% potential_outcomes[, "Yi.1"]

# If n == 0 (invert zeros and ones)
Y0 <- (1 - assignments) %*% potential_outcomes[, "Yi.0"]

# Results
results <- abs(Y1 - Y0) / 11

  

Многократное умножение матрицы %*% возвращает сумму каждой строки присваивания * потенциальный_выход вектора.