有没有办法加快R中的库加载?

时间:2012-05-30 21:34:20

标签: performance r statistics

我有一个Rscript,它会在第一行加载ggplot2

尽管加载库并不需要花费太多时间,因为这个脚本可能会在命令行中执行数百万次,所以速度对我来说非常重要。

有没有办法加快这个加载过程?

3 个答案:

答案 0 :(得分:9)

不要重启 - 保持持久的R会话并向其发出请求。像Rserve之类的东西可以提供这一点,例如FastRWeb非常好地使用它 - 用于生成图表的毫秒往返。

答案 1 :(得分:2)

Dirk说的是,您可以使用exists函数有条件地加载库,如

if ( ! exists( "some.function.defined.in.the.library" )){
    library( the.library )
}

因此,如果您将其放在脚本中,则可以在同一个R会话中多次运行该脚本。

答案 2 :(得分:2)

作为@MikeDunlavey's answer的补充:

实际上,libraryrequire都会检查包是否已加载。 以下是microbenchmark的一些时间:

> microbenchmark (`!` (exists ("qplot")), 
                  `!` (existsFunction ('qplot')),  
                  require ('ggplot2'),  
                  library ('ggplot2'),   
                  "package:ggplot2" %in% search ())

## results reordered with descending median:
Unit: microseconds
                             expr     min       lq   median       uq     max
3              library("ggplot2") 259.720 262.8700 266.3405 271.7285 448.749
1        !existsFunction("qplot")  79.501  81.8770  83.7870  89.2965 114.182
5              require("ggplot2")  12.556  14.3755  15.5125  16.1325  33.526
4 "package:ggplot2" %in% search()   4.315   5.3225   6.0010   6.5475   9.201
2                !exists("qplot")   3.370   4.4250   5.0300   6.2375  12.165

为了比较,第一次加载:

> system.time (library (ggplot2))
   User      System verstrichen 
  0.284       0.016       0.300 

(这些是秒!)

最后,只要不需要require"package:ggplot2" %in% search()之间的因子3 =10μs,我就会使用require,否则使用{{1} }}