У меня странная проблема, и я не могу определить причину root. Я написал простое для-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 использует наименьшее количество кода по сравнению с параллельным. Может кто-нибудь, пожалуйста, укажите мою ошибку. Спасибо.