我编写了以下两个函数,一个用于使用连接测试增加的向量大小,另一个用括号测试:
c_test <- function(n) { cv = c() for(i in 1:n) cv = c(cv, i) cv } b_test <- function(n) { bv = c() for (i in 1:n) bv[i] = i bv } library(microbenchmark) microbenchmark(c_test(1e+4), b_test(1e+4), times = 100) #Unit: milliseconds # expr min lq mean median uq max neval # c_test(10000) 140.27923 145.73282 156.82319 148.16175 151.74713 267.2393 100 # b_test(10000) 49.58033 54.42992 56.24268 54.86033 56.30862 132.8394 100
这是一个很大的时间差异,我不明白为什么使用括号比使用连接更好.在这两种情况下似乎都需要时间来分配新的内存,但这似乎并不正确.我还认为它可能会c(v, x)
转换x
为与v
合并之前相同的类型,但是说v[i] = as.vector(x)
并不是一个重要的时间成本.