R脚本和库预加载?

R脚本和库预加载?,r,shell,preload,rscript,R,Shell,Preload,Rscript,我创建了一个R脚本,它需要先加载一些库 问题是脚本需要1.6秒才能完成计算(使用Linux命令“time”多次测量),而加载库只需要0.7秒 脚本经常运行,因此库加载的延迟几乎占实际工作负载的80% 有没有办法预先加载库,这样就不会在每次脚本运行时加载它们 有没有其他建议可以绕过这种缓慢 #!/usr/bin/Rscript library(methods, quietly=TRUE, warn.conflicts = FALSE) library(MASS, quietly=TRUE, wa

我创建了一个R脚本,它需要先加载一些库

问题是脚本需要1.6秒才能完成计算(使用Linux命令“time”多次测量),而加载库只需要0.7秒

脚本经常运行,因此库加载的延迟几乎占实际工作负载的80%

有没有办法预先加载库,这样就不会在每次脚本运行时加载它们

有没有其他建议可以绕过这种缓慢

#!/usr/bin/Rscript

library(methods, quietly=TRUE, warn.conflicts = FALSE)
library(MASS, quietly=TRUE, warn.conflicts = FALSE)
library(RBGL, quietly=TRUE, warn.conflicts = FALSE)
library(igraph, quietly=TRUE, warn.conflicts = FALSE)
library(bnlearn, quietly=TRUE, warn.conflicts = FALSE)
library(gRbase, quietly=TRUE, warn.conflicts = FALSE)
library(gRain, quietly=TRUE, warn.conflicts = FALSE)
..
..

如果您将脚本转换成一个包(从长远来看,您应该这样做…),那么您可以使用
从您使用的包中导入所需的符号,这通常比
所做的满载要快一点

所以关键是

  • 使用软件包
  • 了解
    命名空间
  • 仅导入所需的符号

  • 一种正交方法是不重新启动并节省时间——您可以将其用作驻留的R实例,只需使用R客户端连接到它。不过可能需要做更多的工作…

    持久化R实例听起来是更快的方法,特别是从长远来看。更糟糕的是,我想知道你是否可以A)使用包函数将函数写入环境中,B)限定名称空间,C)字节将函数编译到环境中,D)保存环境,然后在每次脚本运行时加载它?您可以将其附加到会话,使其与global?中的功能相同。谢谢您的回答。我会试试你的建议。我现在需要阅读更多关于NAMESPACE和RServe的内容,因为我以前对它们一无所知。Vangelis,我有一个类似的问题,您是否曾经使用RServe()作为常驻R实例并从R客户端连接到它?不,我还没有尝试过。该脚本是作为一篇硕士论文的原型概念证明而制作的,因此目前不需要进行速度改进。它被添加到我还没有花时间的“未来工作”部分。