#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
Многократное умножение матрицы %*%
возвращает сумму каждой строки присваивания * потенциальный_выход вектора.