我知道这可能是一个简单的问题,但我正在努力学习和改进。当我尝试这段代码时,它给了我错误:“没有中断/下一个循环,跳到顶层”。有人可以建议为什么并帮助我吗?非常感谢。
x_1 <- rnorm(100)
x_2 <- rnorm(10000)
x_3 <- rnorm(1000000)
to_evaluate <- list(x_1, x_2, x_3)
speed_test <- for (i in to_evaluate) {
microbenchmark(mean_loop(i), mean_mat(i), mean(i))
}
print(speed_test)
mean_loop 和 mean_mat 的代码:
x <- c(1:11)
mean_loop <- function(x) {
sum_of_x <- 0
for(i in x){
sum_of_x <- sum_of_x + x[i]
}
mean_of_x <- sum_of_x/length(x)
return(mean_of_x)
}
mean_mat <- function(x) {
sum(diag(length(x))%*%x)/length(x)
}
该函数microbenchmark
(来自包microbenchmark
)可让您测量代码运行的速度。如果你给它代码来评估,它会评估它 100 次,并返回代码运行时间的汇总统计信息。如果给它多个表达式,它会为每个表达式执行此操作。
这对我来说使用问题中的函数定义 -
x_1 <- rnorm(10)
x_2 <- rnorm(100)
x_3 <- rnorm(1000)
library(microbenchmark)
to_evaluate <- list(x_1, x_2, x_3)
result <- vector('list', length(to_evaluate))
for (i in seq_along(to_evaluate)) {
val <- to_evaluate[[i]]
result[[i]] <- microbenchmark(mean_loop(val), mean_mat(val), mean(val))
}
result
#[[1]]
#Unit: microseconds
# expr min lq mean median uq max neval cld
# mean_loop(val) 2.818 3.2495 7.62632 4.204 5.847 41.214 100 a
# mean_mat(val) 2.547 2.9765 7.90376 3.571 4.940 93.155 100 a
# mean(val) 1.896 2.1700 6.59605 2.818 4.204 116.467 100 a
#[[2]]
#Unit: microseconds
# expr min lq mean median uq max neval cld
#mean_loop(val) 49.368 89.8705 92.81099 92.820 99.6505 179.400 100 c
# mean_mat(val) 18.968 50.7335 55.61163 52.987 55.5770 141.363 100 b
# mean(val) 2.090 2.2815 3.87982 2.803 3.3115 33.779 100 a
#[[3]]
#Unit: microseconds
# expr min lq mean median uq max neval cld
# mean_loop(val) 1359.527 1511.9295 3312.36578 1835.326 2970.1350 16455.048 100 b
# mean_mat(val) 1713.178 2155.3815 4032.53143 2352.858 2739.6650 19783.264 100 b
# mean(val) 3.708 4.6695 16.39451 14.881 21.8355 162.184 100 a
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句