我正在尝试使用R实现Hadoop Streaming的reducer。但是,我需要找到一种方法来访问某些不是用R,dplyr..etc构建的库。基于我的研究似乎有两种方法:
(1)在reducer代码中,将所需的库安装到临时文件夹中,并在会话完成后处理它们,如下所示:
.libPaths(c(.libPaths(), temp <- tempdir()))
install.packages("dplyr", lib=temp, repos='http://cran.us.r-project.org')
library(dplyr)
...
但是,这种方法会产生巨大的开销,具体取决于您尝试安装的库数量。因此,大多数时间都会浪费在安装库上(像dplyr这样的复杂库有很多依赖项,需要花费几分钟才能在vanilla R会话上安装)。
听起来我需要事先安装它,这导致我们接近2。
(2)我的群集相当大。而且我必须使用像Ansible这样的工具来使它工作。所以我更喜欢使用一个Linux shell命令来安装库。我之前看过R CMD INSTALL...
,但感觉就像只从源文件安装包而不是在R控制台中执行install.packages()
,找出镜像,拉出源文件,在一个命令中安装它。
有谁能告诉我如何在shell中使用一个命令行来非交互式安装R包? (对不起这么多的背景知识,如果有人认为我甚至没有遵循正确的哲学,请随时留下评论如何管理整个集群R包。)
答案 0 :(得分:23)
虽然Dirk的小小看起来非常有趣,但我发现它并不是那么简单,因为你需要部署install.r脚本才能使用该功能。这在交互式工作时不是问题,但对于自动安装脚本,它会增加一些开销 - 也许Dirk可以为此添加一些示例。
所以替代方案是:
Rscript -e 'install.packages("drat", repos="https://cran.rstudio.com")'
如果您在磁盘上使用本地创建的类似CRAN的repo,则可以提供repos
参数的路径,并在其前面添加file://dir-of-my-cran-subset
。如果您使用包裹它的tools::write_PACKAGES
或drat
包,这非常有用。
答案 1 :(得分:2)
您可能会发现littler有用。它是R的命令行前端/变体(使用R嵌入接口)。
我一直使用install.r脚本来从shell安装软件包。有一个second variant with more command-line argument parsing,但它有一个附加的依赖。