R микробенгирование l oop против вектора против параллели дает инвертированные результаты - PullRequest
0 голосов
/ 12 апреля 2020

У меня странная проблема, и я не могу определить причину rootenter image description here. Я написал простое для-l oop, векторное и параллельное ядро, работающее в среде Jupyter.

fn_loop <- function(x1, nrep = 1000) {
    n1 <- length(x1)
    B <- nrep

    Tboot <- rep(NA, B)
    xx1 <- rep(NA, n1)

    for (i in 1:B) {
        xx1 <- sample(x1, n1, replace = TRUE) # sample of size n1 with replacement from x1
        Tboot[i] <- mean(xx1) 
    }
    return(Tboot)
}

fn_vec <- function(x1, nrep = 1000) {
    n1 <- length(x1)
    B <- nrep


    Tboot <- lapply(1:nrep, function(i){ mean(sample(x1, n1, replace = TRUE))})
    return(Tboot)
}

fn_par  <- function(x1, nrep = 1000) {
    n1 <- length(x1)
    B <- nrep


    Tboot <- mclapply(1:nrep, function(i){ mean(sample(x1, n1, replace = TRUE))}, mc.cores=8)
    return(Tboot)
}

#Benchmark forloop, vector, parallel codes
library(microbenchmark)
m <- microbenchmark(times = 1000, # default is 100
  "loop"         = fn_loop(x1, 1000),                  
  "vector"       = fn_vec(x1, 1000),
  "parallel"     = fn_par(x1, 1000))

ggplot2::autoplot(m)

Результаты в ggplot2 инвертированы ... l oop использует наименьшее количество кода по сравнению с параллельным. Может кто-нибудь, пожалуйста, укажите мою ошибку. Спасибо.

...