【问题标题】:Installing R packages from a local repo (all .tar.gz files have been downloaded there)从本地 repo 安装 R 包(所有 .tar.gz 文件都已下载到那里)
【发布时间】:2017-03-16 09:53:59
【问题描述】:

来自澳大利亚的早上好,

由于我们工作的计算机无法访问互联网,我已要求我们的 IT 经理下载所有 R 软件包并将它们放在共享的网络位置。我已经将那些 4GB 的包转移到我的本地目录: E:/R-3.3.1/MyRPackages/src/contrib/______.tar.gz

我希望将我的软件包安装在 E:\R-3.3.1\library

我使用的是 64 位 Windows 7 Professional,以及 RStudio 和 R 版本 3.3.1 (2016-06-21)。

我只是想 install.packages 并从我的本地 repo 安装一个包,包括它的所有依赖项。

我已尝试阅读此内容并尝试了 install.packages 命令的几种排列方式,但运气不佳。例如,

install.packages("E:/R-3.3.1/MyRPackages/src/contrib/devtools_1.12.0.tar.gz",dependencies = TRUE,repos = NULL)

错误:依赖项 'httr'、'memoise'、'whisker'、'digest'、'rstudioapi'、'jsonlite'、'git2r'、'withr' 不适用于包 'devtools' * 删除 'E:/R-3.3.1/library/devtools' install.packages 中的警告: 运行命令 '"E:/R-33~1.1/bin/x64/R" CMD INSTALL -l "E:\R-3.3.1\library" "E:/R-3.3.1/MyRPackages/src/contrib /devtools_1.12.0.tar.gz"' 的状态为 1 install.packages 中的警告: 安装包‘E:/R-3.3.1/MyRPackages/src/contrib/devtools_1.12.0.tar.gz’的退出状态非零

install.packages("E:/R-3.3.1/MyRPackages/src/contrib/devtools_1.12.0.tar.gz",dependencies = TRUE,repos = NULL,lib="E:/R -3.3.1/图书馆")

错误:依赖项 'httr'、'memoise'、'whisker'、'digest'、'rstudioapi'、'jsonlite'、'git2r'、'withr' 不适用于包 'devtools' * 删除 'E:/R-3.3.1/library/devtools' install.packages 中的警告: 运行命令 '"E:/R-33~1.1/bin/x64/R" CMD INSTALL -l "E:\R-3.3.1\library" "E:/R-3.3.1/MyRPackages/src/contrib /devtools_1.12.0.tar.gz"' 的状态为 1 install.packages 中的警告: 安装包‘E:/R-3.3.1/MyRPackages/src/contrib/devtools_1.12.0.tar.gz’的退出状态非零

install.packages("E:/R-3.3.1/MyRPackages/src/contrib/devtools_1.12.0.tar.gz",dependencies = TRUE,repos = NULL,lib="E:/R -3.3.1/library",type = "source")

错误:依赖项 'httr'、'memoise'、'whisker'、'digest'、'rstudioapi'、'jsonlite'、'git2r'、'withr' 不适用于包 'devtools' * 删除 'E:/R-3.3.1/library/devtools' install.packages 中的警告: 运行命令 '"E:/R-33~1.1/bin/x64/R" CMD INSTALL -l "E:\R-3.3.1\library" "E:/R-3.3.1/MyRPackages/src/contrib /devtools_1.12.0.tar.gz"' 的状态为 1 install.packages 中的警告: 安装包‘E:/R-3.3.1/MyRPackages/src/contrib/devtools_1.12.0.tar.gz’的退出状态非零

【问题讨论】:

  • 由于您的repos=NULL,R 将不知道在哪里查找依赖项,因此您还需要下载它们并预先安装它们。您是否有理由不使用例如install.packages("devtools")? ...对不起,应该读你的第一句话!
  • 由于您使用的是 Windows,因此您应该安装二进制文件(zip 文件)。这将比从源代码编译包容易得多。或者,您可以简单地将每个 zip 文件解压缩到 e:/R-3.3.1/library。
  • 我目前正在将它们解压缩到我的库中,但是当我尝试使用 library('package_name') 加载包时,它显示“库中的错误(“blah”):“Blah”不是有效的安装包
  • 如果你有文件可以不使用library(tools)write_PACKAGES
  • @user20650 是正确的。 write_PACKAGES 是建立 R 用来建立依赖关系的基础设施所需的工具之一。您还可以查看drat package

标签: r install.packages


【解决方案1】:

稍微跟进@rosscova 的回答:有多种工具可用于确定包的完整递归依赖集。再多做一点工作,您就可以编写一个脚本来抓取它们(这确实很可能已经有人在某个地方完成了......)

## dependencies=TRUE 
devtools::package_deps("devtools",dependencies=TRUE)
(p <- package_deps("devtools",dependencies=TRUE))
Needs update -----------------------------
 package       installed available remote
 curl          1.2       2.2       CRAN  
 evaluate      0.9       0.10      CRAN  
 gmailr        NA        0.7.1     CRAN  
 hunspell      NA        2.1       CRAN  
 irlba         2.1.1     2.1.2     CRAN  
 openssl       0.9.4     0.9.5     CRAN  
 R6            2.1.3     2.2.0     CRAN  
 rmarkdown     1.0       1.1       CRAN  
 stringi       1.1.1     1.1.2     CRAN 

这可能有点误导,因为 (?package_deps)

“print()”方法识别不匹配 (如果有的话)在每个依赖的本地版本和 CRAN 版本之间 包装;

这意味着要获得完整的依赖项列表,您需要直接打印p$package

p$package
 [1] "assertthat"    "base64enc"     "BH"            "BiocInstaller"
 [5] "bitops"        "brew"          "caTools"       "colorspace"   
 [9] "covr"          "crayon"        "curl"          "devtools"     
[13] "dichromat"     "digest"        "doParallel"    "evaluate"     
[17] "foreach"       "formatR"       "ggplot2"       "git2r"        
[21] "gmailr"        "gridBase"      "gtable"        "highr"        
[25] "htmltools"     "httr"          "hunspell"      "igraph"       
[29] "irlba"         "iterators"     "jsonlite"      "knitr"        
[33] "labeling"      "lazyeval"      "lintr"         "magrittr"     
[37] "markdown"      "memoise"       "mime"          "munsell"      
[41] "NMF"           "openssl"       "pkgmaker"      "plyr"         
[45] "praise"        "R6"            "RColorBrewer"  "Rcpp"         
[49] "registry"      "reshape2"      "rex"           "rmarkdown"    
[53] "rngtools"      "roxygen2"      "rstudioapi"    "rversions"    
[57] "scales"        "stringdist"    "stringi"       "stringr"      
[61] "testthat"      "tibble"        "whisker"       "withr"        
[65] "xml2"          "xtable"        "yaml"      

【讨论】:

    【解决方案2】:

    如果没有 Internet 连接,您还需要让 IT 经理下载依赖包,并以适当的顺序安装它们。当您将repos = NULL 传递给install.packages 函数时,它无处可查找这些依赖项。

    由于这些依赖关系中的每一个都可能有它们自己的依赖关系*,这可能最终会成为您的 IT 经理的一大痛苦(是的,我也在澳大利亚!)。我可以建议您安排在您的机器上临时连接到互联网吗?否则,也许看看 Packrat,它应该(我自己以前没有使用过)允许您的 IT 经理创建一个项目,其中嵌入了您需要的包(包括它们的依赖项)。然后你可以用它在你的机器上安装包。

    • 例如,devtools依赖的包httr,它本身依赖于mimecurlopensslR6...mime然后继续依赖tools ...然后我们去了兔子洞...

    【讨论】:

    • 嗯...目前我已经下载了所有 9000 多个软件包。所以是的,它应该具有所有这些依赖项。
    猜你喜欢
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2013-04-20
    • 1970-01-01
    相关资源
    最近更新 更多