Как сделать цикл максимально быстрым в R?

1
6

Я провожу исследование моделирования. У меня есть 2 версии codeа на R, исходная и улучшенная. Улучшенная версия (которую я попробовал сам) быстрее, чем исходная.

Но какой самый эффективный способ (который может сделать code еще быстрее)... потому что я планировал запускать итерации до 1 миллиона раз. Исходная версия заняла у меня почти 10 часов, а улучшенная — 3,4 часа. Мне определенно нужно улучшить скорость и эффективность до следующего уровня... Нужна помощь :)

Оригинальная :

Измененная :

library(parallel)
library(tidyverse)
library(future.apply)
iterations <- 100

start_time <- Sys.time()

simulation <- function(i) {

  alpha = 2 
  p <- runif(1000, 0, 1)
  x <- (-logb(1 - p))^(1 / alpha)
  n_x <- length(x)
  
  f = function(par, x, y){
    return( -((n_x)*logb(par[1])))
  }
            
  result <- optim(c(1), fn = f, x = x)
  return(result$par)
  }

results_list <- lapply(1:iterations, simulation)    
results <- do.call(rbind, results_list)
colnames(results) <- c("alpha")

end_time <- Sys.time()
end_time - start_time
    plan(multisession, workers = parallel::detectCores() - 1)

    iterations <- 100

    start_time <- Sys.time()
    
    simulation <- function(i) {

      alpha = 2 
      p <- runif(1000, 0, 1)
      x <- (-logb(1 - p))^(1 / alpha)
      n_x <- length(x)
      
      f = function(par, x, y){
        return( -((n_x)*logb(par[1])))
      }
                
      result <- optim(c(1), fn = f, x = x)
      return(result$par)
      }
    
results_list <- future_lapply(1:iterations, simulation)
    results <- do.call(rbind, results_list)
    colnames(results) <- c("alpha")
    
    end_time <- Sys.time()
    end_time - start_time
Стоян
Вопрос задан23 марта 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.