我有一个Rscript,它会在第一行加载ggplot2
。
尽管加载库并不需要花费太多时间,因为这个脚本可能会在命令行中执行数百万次,所以速度对我来说非常重要。
有没有办法加快这个加载过程?
答案 0 :(得分:9)
答案 1 :(得分:2)
Dirk说的是,您可以使用exists
函数有条件地加载库,如
if ( ! exists( "some.function.defined.in.the.library" )){
library( the.library )
}
因此,如果您将其放在脚本中,则可以在同一个R会话中多次运行该脚本。
答案 2 :(得分:2)
作为@MikeDunlavey's answer的补充:
实际上,library
和require
都会检查包是否已加载。
以下是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} }}