哪一个更快,为什么?如果有的话 - 可能取决于我们使用的数据和功能。如果是这样,怎么样? 我查了几个例子:
lista <- list(a=1:100, b=-20:500,c=300:1000,rep(1000,1000))
for(i in 1:10){ lista <- c(lista,lista)} # length==4096
比较我写了这个函数
loopfor <- function(x, fun){
ret <- vector("list",length(x))
for (i in seq_along(x)) {
ret[[i]] <- fun(x[[i]])
}
return(ret)
}
lapplyfun <- function(x, fun){
ret <- lapply(x, fun)
return(ret)
}
loopfor vs lapplyfun call
对于sum
函数,lapply是获胜者
require(microbenchmark)
microbenchmark(loopfor(lista,sum), lapplyfun(lista,sum),times=100)
Unit: milliseconds
expr min lq median uq max neval
loopfor(lista, sum) 20.496391 21.058436 21.423077 22.309260 50.80541 100
lapplyfun(lista, sum) 8.745445 9.007782 9.342844 9.777506 15.15932 100
但是对于像summary
这样更复杂的功能,差异非常小
microbenchmark(loopfor(lista,summary), lapplyfun(lista,summary),times=10)
Unit: seconds
expr min lq median uq max neval
loopfor(lista, summary) 2.147071 2.164275 2.186433 2.228169 2.342094 10
lapplyfun(lista, summary) 2.024157 2.099712 2.198469 2.314902 2.550751 10
任何解释,想法?也许loopfor
应该以不同的方式编写,以提高性能? :)