过度使用source()
来使用多个.R
文件中的函数是否会带来性能权衡?
换句话说,当代码存在于单个.R
文件中时(相比之下,当它通常不是很漂亮时),代码的运行速度会明显加快分散在多个文件中的块?
答案 0 :(得分:1)
我认为你应该真的问一下这样的事情与代码的清晰度有什么样的“收获” 但只是为了完整......
在这里,我们在一个source()
到long.r
或3到short1-3.r
中提供10个fxns。
# 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
# my shrt 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
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微秒不是回家的东西,因此应该推迟给出最清晰的代码。