R for loop vs lapply(性能)

时间:2014-04-10 21:34:07

标签: r performance for-loop lapply

哪一个更快,为什么?如果有的话 - 可能取决于我们使用的数据和功能。如果是这样,怎么样? 我查了几个例子:

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应该以不同的方式编写,以提高性能? :)

0 个答案:

没有答案