我想在没有互联网连接的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试图找到
Rcpp的二进制版本(由于没有互联网连接而失败)Rcpp的来源(由于没有互联网连接而失败)我不明白为什么packrat也不搜索本地二进制包..。
问题1:我可以下载源CRAN存储库来解决这个问题。但是我想从你们那里知道是否有一个更简单的解决方案,也就是,是否有可能让packrat接受本地二进制回购。
问题2:当我创建自己的包myPackage并启用packrat时,myPackage-specific本地packrat库也会包含在包中吗?也就是说,假设我将二进制myPackage压缩文件交给我的同事,他没有myPackage所依赖的包(假设是Rcpp)。当我使用Rcpp时,myPackage中会包含packrat吗?还是我的同事必须亲自安装Rcpp?
发布于 2015-07-09 13:43:08
我设法解决了这个问题。请记住,我以前从未使用过packrat,而且我不知道它的“正确”行为。但我的印象是黑客成功了。我就是这样做的:
packrat加载library(packrat)fixInNamespace("snapshotImpl",ns="packrat") -打开一个窗口-将其内容复制到剪贴板中/yourProjDir/并创建一个文件snapshotImplFix.RsnapshotImplFix=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!保存并关闭文件。/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的问题(我没有找到更好的方法来更改.)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");。yourProjDir/.Rprofile并在末尾添加
local({r=getOption("repos");r["CRAN"]="file:///C:/xyz/CRAN_3_1";r["CRANextra"]=r["CRAN"];options(repos=r)})
注意/后面的3 file!保存和退出文件。packrat::init()了,并且它应该没有错误地运行。如果一个在packrat方面有更多经验的人能给出他/她的意见,我就能确定这个黑客成功了,那就太好了。当然,任何指向正确解决方案的指针都会受到高度赞赏。
https://stackoverflow.com/questions/31314229
复制相似问题