R从Shell安装包

问题描述 投票:9回答:2

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

r ansible hadoop-streaming
2个回答
2
投票

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

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


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

© www.soinside.com 2019 - 2024. All rights reserved.