【问题标题】:R install packages from ShellR 从 Shell 安装包
【发布时间】:2015-01-15 02:21:19
【问题描述】:

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


    【解决方案1】:

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

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

    【讨论】:

    • install.r 脚本的链接已失效。
    • 我错误地省略了一个目录。现已修复。
    • 第二个变体仍然指向第一个变体,你能不能也改一下?我会自己编辑它,但我不能做这么小的编辑(?)。
    • 完成,为install2.r 添加了缺少的2。我还意识到,当我将“纯源代码仓库”更改为“CRAN 包的仓库”时,链接可能已断开,这需要在 inst/examples 目录安装 examples/(R 详细信息)。感谢您的检查。
    【解决方案2】:

    tl;博士

    Rscript -e 'install.packages("drat", repos="https://cloud.r-project.org")'
    

    您提到您正在尝试将dplyr 安装到磁盘上的自定义lib 位置。请注意,dplyr 包不支持该功能。你可以在dplyr#4641阅读更多内容。


    此外,如果您要安装在内部类似 CRAN 的存储库中发布的私有包(由 drattools::write_PACKAGES 创建),您可以轻松组合 repos 参数并自动解析来自 CRAN 的依赖项。

    Rscript -e 'install.packages("priv.pkg", repos=c("cran.priv","https://cloud.r-project.org"))'
    

    这是 R 存储库的非常方便的功能,尽管对于生产用途,我建议在本地缓存 CRAN 中的包并使用它们,因此您永远不会对依赖项的重大更改感到惊讶.有关在生产中处理 R 的质量信息,我建议查看 Wit Jakuczun 在WhyR2019 上的演讲如何使 R 在(不仅)企业中非常适合机器学习slidesvideo

    【讨论】:

    • 我不明白你的意思——install.r 附带的更小,我们倾向于只在/usr/local/bin 中安装软链接。那么它就是install.r drat。对于它的价值,我们在摇杆中使用了很多 install.rinstall2.r (支持命令行选项)。参见例如this Dockerfile
    • 最好不要为了安装软件包等基本工作而安装新软件。
    • 在将包推送到 100 多台计算机时,这是一个非常好的方法。非常简单且易于编写脚本/自动化。
    • @Bastion 如果你进行这样的部署,那么最好缓存这个包(或 pkgs 树,如果它有 deps)并从本地 CRAN-line repo 安装。否则,您最终可能会在不同的机器上安装不同的版本。你可以使用mirror.packages
    • 在 GNU/Linux 机器上,你需要使用 'sudo' 运行它: sudo Rscript -e 'install.packages("drat", repos="cloud.r-project.org")'
    猜你喜欢
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    相关资源
    最近更新 更多