我一直以为*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