【问题标题】:Install an R package directly from a URL for the package source直接从包源的 URL 安装 R 包
【发布时间】:2013-05-01 00:41:02
【问题描述】:

我想直接从包源的 URL 安装包。我想这样做是为了让人们可以轻松地测试不应广泛(或永久)可用的软件包的预发布版本。 This 是一个类似的问题,但有所不同,因为它只描述了如何从本地文件而不是通用 URL 进行安装。

为了这个问题,我将使用boot 包源的链接。阅读?install.packages 特别是pkgs 参数的描述表明:

install.packages(
  "http://cran.r-project.org/src/contrib/Archive/boot/boot_1.3-7.tar.gz", 
  repos = NULL, type = "source"
)

但是这失败了:

Warning in install.packages :
  installation of package 
  ‘http://cran.r-project.org/src/contrib/Archive/boot/boot_1.3-7.tar.gz’ 
  had non-zero exit status

建议将 URL 解释为包名称,而不是其位置。 我们可以通过以下两步过程来解决这个问题:

download.file(
  "http://cran.r-project.org/src/contrib/Archive/boot/boot_1.3-7.tar.gz", 
  "boot"
)
install.packages("boot", repos = NULL, type = "source")

但我更愿意只调用install.packages 来完成此操作;而且由于install.packages 无论如何都能够下载文件,我觉得这应该是可能的。

【问题讨论】:

  • 在您的原始呼叫中找不到该包,因为它不存在。在那个目录中是boot_1.3-9.tar.gz
  • @SimonO101 抱歉,这是我在写问题时犯的一个错误。不幸的是,修复它并不会改变行为。
  • 为什么不将存储源包的目录设置为存储库? Here is an example,尽管您可能希望将 type="source" 替换为 type="win.binary"
  • 谢谢@Josh,这是一个很好的建议。
  • 好。既然我明白了你在追求什么,那我就来回答一下吧。

标签: r


【解决方案1】:

如果url是github仓库,试试:install_github()

例如


library(devtools)

install_github("DeveloperName/PackageName")

# e.g. install_github("cran/seoR")

【讨论】:

    【解决方案2】:

    install.packages 从 3.1.1 开始现在可以与 http URL(还不是 https)一起使用。这对我有用:

    install.packages("http://www.lepem.ufc.br/jaa/colorout_1.1-0.tar.gz", repos=NULL)
    

    编辑:从 R 3.2.0 开始,https 是通过 libcurl 内置的。现在应该可以工作了:

    install.packages("https://github.com/hadley/devtools/archive/v1.7.0.tar.gz",
                     repos=NULL, method="libcurl")
    

    编辑:从 R 3.2.2 开始,https 应该使用默认选项,前提是编译了 libcurl 支持。

    编辑 2016-04-20:下载托管在 S3 上的软件包可能会出现一些问题,但 method='wget' 目前似乎适用于这些问题。

    【讨论】:

    • install.packages() 尝试使用download.file() 下载文件时,此方法失败并出现“403 Forbidden”错误。不确定是否编译了 libcurl 支持,但 @G 建议使用 devtools::install_url()。格洛腾迪克工作没有问题。
    • 这听起来像是一个身份验证问题。你要下载什么网址?
    • 是的,它似乎是不同的 URL(可能是文件实际托管的位置)。比较 install.packages("https://bitbucket.org/kleinstein/logminer/downloads/pclogit_0.2.tar.gz")devtools::install.packages("https://bitbucket.org/kleinstein/logminer/downloads/pclogit_0.2.tar.gz")
    • 该网址重定向到https://bbuseruploads.s3.amazonaws.com/786fe3b9-c855-4ead-8e92-9a923307571e/downloads/198445c2-b162-4e7b-9de9-2a5def8c1e70/pclogit_0.2.tar.gz?Signature=rkSXfOUzDeYaOiA0s%2BcFOqA33jc%3D&Expires=1492645028&AWSAccessKeyId=AKIAIVFPT2YJYYZY3H4A&versionId=E0GlRikyD2HwjjssxYfoSos.KUV9jOtd&response-content-disposition=attachment%3B%20filename%3D%22pclogit_0.2.tar.gz%22。我认为亚马逊正在阻止 base R 的用户代理而不是 devtools,因为install.packages(..., method='wget') 似乎工作正常。不过很奇怪,您可能想向 R 维护人员报告。
    • 是的,method="wget" 对我来说工作正常,所以 install.packages 是一个很好的解决方案。如果您修改答案以注意“wget”方法可能对某些 URL 更有效,我会赞成。 :)
    【解决方案3】:

    请参阅 devtools 包中的 ?install_url

    【讨论】:

      【解决方案4】:

      为什么不将存储源包的目录设置为存储库?

      Here is an example(尽管您可能希望用type="source" 替换该链接代码中的type="win.binary")。

      【讨论】:

      • 这解决了我的问题。我曾希望install.packages 能够在存储库之外下载和安装软件包,但仔细阅读文档我认为这是不可能的,所以我接受了你的回答。
      猜你喜欢
      • 1970-01-01
      • 2010-12-01
      • 2013-07-04
      • 1970-01-01
      相关资源
      最近更新 更多