0

如果我有条件,将其放在应用函数内部/外部是否会显着影响运行时间,例如:

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
    }
})

谢谢

4

1 回答 1

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是在计时循环内评估的,因此必须提供函数括号。

于 2012-11-21T17:40:22.547 回答