apply中的if语句如何影响运行时

时间:2012-11-21 17:27:33

标签: r apply

如果我有条件,将它放在apply函数内部/外部会显着影响运行时间,例如:

names = c("Joe", "Jen", "Bob")

if("Joe" %in% names){
     lapply(1:1000000, function(y){
        #Do something computationally intensive
     })
}
if("Jen" %in% names){
    lapply(1:1000000, function(y){
        #Do something computationally intensive
    })
}

对战:

lapply(1:1000000, function(y){
    if("Joe" %in% names){
        #Do something computationally intensive
    }
    if("Jen" %in% names){
        #Do something computationally intensive
    }
})

由于

1 个答案:

答案 0 :(得分:2)

循环中的if非常昂贵。

使用rbenchmark查看。将第一个写为函数'a',将第二个写为'b',得到:

> benchmark(a(), b(), replications=1)
  test replications elapsed relative user.self sys.self user.child sys.child
1  a()            1   0.595     1.00     0.593    0.000          0         0
2  b()            1   4.141     6.96     4.121    0.001          0         0

建议将“Joe”和“Jen”放入名称中。结果大致相同。

> benchmark(a(), b(), replications=1)
  test replications elapsed relative user.self sys.self user.child sys.child
1  a()            1   0.600    1.000     0.597        0          0         0
2  b()            1   4.036    6.727     4.016        0          0         0

编辑:请注意,您提供给benchmark的表达式在计时循环内进行评估,因此必须提供函数括号。