vapply vs R中的循环速度/效率 - 显着更差?

时间:2018-04-05 21:19:22

标签: r for-loop apply lapply

我一直以为*apply系列的函数在R中优先于vanilla for循环,因为它们被认为更快并且没有副作用。我决定使用microbenchmark使用一个简单的示例对此进行测试,并感到震惊的是vapply实际上显着较慢。

我在SO上发帖说他们基本相同,但for循环显着优于apply语句。这让我想知道在某些情况下我是否应该编写for循环。

bob = function()
{
  x=vector(mode='numeric',length=100)
  for(i in 1:100)
  {
    x[i]=i+i
  }
  x
}



> microbenchmark(bob(),unit='ns')
Unit: nanoseconds
  expr  min     lq    mean median     uq   max neval
 bob() 5306 5399.5 5606.32 5486.5 5584.5 15123   100

   > microbenchmark(vapply(1:100,function(x) x+x,FUN.VALUE = numeric(1)),unit='ns')
Unit: nanoseconds
  expr   min      lq     mean median      uq     max neval
 [...] 46781 48370.5 61478.68  49319 51696.5 1029655   100

#lapply isn't any better
> microbenchmark(lapply(1:100,function(x) x+x),unit='ns')
Unit: nanoseconds
  expr   min    lq     mean  median      uq     max neval
 [...] 43931 45919 62958.69 46736.5 47674.5 1616723   100

0 个答案:

没有答案