Packrat与本地二进制存储库

时间:2015-07-09 10:00:27

标签: r packrat

我想在没有互联网连接的Windows 7计算机上使用packrat。 我已将http://cran.r-project.org/bin/windows/contrib/3.1/的所有二进制包下载到本地文件夹C:/xyz/CRAN_3_1

现在的问题是

packrat::init(options=list(local.repos="C:/xyz/CRAN_3_1"))

抛出一堆警告和错误,如

Warning: unable to access index for repository http://cran.rstudio/bin/...
Warning: unable to access index for repository http://cran.rstudio/src/...
Fetching sources for Rcpp (0.11.4) ... Failed
Package Rcpp not available in repository or locally

似乎packrat试图找到

  1. CRAN上的Rcpp二进制版本(因为没有互联网连接而失败)
  2. CRAN上Rcpp的来源(由于没有互联网连接而失败)
  3. 包的本地源(因为我只有二进制文件而失败)
  4. 我不明白为什么packrat也不会搜索本地 二进制包...

    问题1:我可以下载源CRAN存储库来解决此问题。但我想告诉大家,是否有一个更简单的解决方案,,是否有可能使packrat接受本地二进制仓库。

    问题2 :当我在启用了packrat的情况下创建自己的包myPackage时,包中还会包含myPackage特定的本地packrat库?也就是说,假设我将二进制myPackage zip文件提供给我的一位没有myPackage所依赖的软件包的同事(让我们说Rcpp) 。当我使用Rcpp时,myPackage会包含packrat吗?或者我的同事是否必须自己安装Rcpp

1 个答案:

答案 0 :(得分:2)

我设法解决了这个问题。请记住,我以前从未使用过packrat而且我不知道它的#34;正确的"行为。但我的印象是黑客行事。 我是这样做的:

  1. 打开您的项目,通过packrat
  2. 加载library(packrat)
  3. 键入fixInNamespace("snapshotImpl",ns="packrat") - 打开一个窗口 - 将其内容复制到剪贴板
  4. 转到/yourProjDir/并创建文件snapshotImplFix.R
  5. 将剪贴板的内容复制到此文件中......
  6. ...但是将第一行更改为

    snapshotImplFix=function (project, available = NULL, lib.loc = libDir(project), dry.run = FALSE, ignore.stale = FALSE, prompt = interactive(), auto.snapshot = FALSE, verbose = TRUE, fallback.ok = FALSE, snapshot.sources = FALSE)

    注意snapshot.sources = FALSE!保存并关闭文件。

  7. 创建/yourProjDir/.Rprofile并添加

    setHook(packageEvent("packrat","onLoad"),function(...) { source("./snapshotImplFix.R"); tmpfun=get("snapshotImpl",envir=asNamespace("packrat")); environment(snapshotImplFix)=environment(tmpfun); utils::assignInNamespace(x="snapshotImpl",value=snapshotImplFix,ns="packrat");})

    点2-6修复了snapshot.sources参数默认为TRUE的问题(我没有找到更好的方法来改变它......)

  8. 最后,我们必须告诉packrat带我们的本地存储库。拥有正确的文件夹结构非常重要。因此,我将回购从C:/xyz/CRAN_3_1移至C:/xyz/CRAN_3_1/bin/windows/contrib/3.1。如果您还需要移动文件,请不要忘记运行library(tools);write_PACKAGES("C:/xyz/CRAN_3_1/bin/windows/contrib/3.1");

  9. 再次打开yourProjDir/.Rprofile并在最后添加

    local({r=getOption("repos");r["CRAN"]="file:///C:/xyz/CRAN_3_1";r["CRANextra"]=r["CRAN"];options(repos=r)})

    请注意/之后的3 file!保存并退出文件。

  10. 关闭项目并重新打开。

  11. 现在您可以执行packrat::init(),它应该可以正常运行。

  12. 如果对packrat有更多经验的人能够提供他/她的输入以便我确信这个黑客行之有效,那就太棒了。当然,任何指向正确解决方案的指针都非常受欢迎。