采购和绩效之间是否有任何权衡?

时间:2014-05-25 05:24:58

标签: r performance

过度使用source()来使用多个.R文件中的函数是否会带来性能权衡?

换句话说,当代码存在于单个.R文件中时(相比之下,当它通常不是很漂亮时),代码的运行速度会明显加快分散在多个文件中的块?

1 个答案:

答案 0 :(得分:1)

我认为你应该真的问一下这样的事情与代码的清晰度有什么样的“收获” 但只是为了完整......

让我们进行比较:

在这里,我们在一个source()long.r或3到short1-3.r中提供10个fxns。

在long.r中:

# my long source file
fun1 <- function(x) x
fun2 <- function(x) x
fun3 <- function(x) x
fun4 <- function(x) x
fun5 <- function(x) x
fun6 <- function(x) x
fun7 <- function(x) x
fun8 <- function(x) x
fun9 <- function(x) x
fun10 <- function(x) x

in short1.r

# my shrt source file
fun1 <- function(x) x
fun2 <- function(x) x
fun3 <- function(x) x

in short2.r

fun4 <- function(x) x
fun5 <- function(x) x
fun6 <- function(x) x

简称3.r

fun7 <- function(x) x
fun8 <- function(x) x
fun9 <- function(x) x
fun10 <- function(x) x

基准:

require(microbenchmark)

src_long <- function(){
source("long.r")
}

src_shorts <- function(){
    source("short1.r")
    source("short2.r")
    source("short3.r")
}


microbenchmark(src_long(),src_shorts())

在我的机器上我得到:

Unit: microseconds
    expr        min       lq     median      uq      max     neval
  src_long()  691.690  733.271  763.3405  806.3555 3242.216   100
src_shorts() 1354.356 1431.011 1476.2555 1541.9445 3528.760   100

因此,当您对source()进行3次调用而不是1时,需要大约2倍。大概是因为通过源本身的else/if语句添加了评估。 700微秒不是回家的东西,因此应该推迟给出最清晰的代码