R从Shell安装包

时间:2014-11-18 01:31:47

标签: r ansible hadoop-streaming

我正在尝试使用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包。)

2 个答案:

答案 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_PACKAGESdrat包,这非常有用。

答案 1 :(得分:2)

您可能会发现littler有用。它是R的命令行前端/变体(使用R嵌入接口)。

我一直使用install.r脚本从shell安装软件包。有一个second variant with more command-line argument parsing,但它有一个附加的依赖。