16 Iteration
学习使用purrr
实现迭代。
16.1 一个很长的导图
16.2 导图补充
16.3 练习
(1)It’s common to see for loops that don’t preallocate the output and instead increase the length of a vector at each step:
output <- vector("integer", 0)
for (i in seq_along(x)) {
output <- c(output, lengths(x[[i]]))
}
output
How does this affect performance? Design and execute an experiment.
安装microbenchmark
包,microbenchmark
函数可以比较多个函数多次运行时间。
# 未预先分配输出空间
add_vector_1 <- function(n){
output <- vector("integer", 0)
for (i in seq_len(n)) {
output <- c(output, i)
output
}
}
# 预先分配输出空间
add_vector_2 <- function(n){
output <- vector("integer", n)
for (i in seq_len(n)) {
output[[i]] <- i
output
}
}
# 比较运行时间
microbenchmark(add_vector_1(10000), add_vector_2(10000), times = 10)
#> Unit: microseconds
#> expr min lq mean median uq max neval
#> add_vector_1(10000) 99278 104586 115419 107580 125863 150725 10
#> add_vector_2(10000) 566 648 1206 890 1398 3475 10
差了两个数量级。