Packrat图书馆可以';拆开包装后,不得进行快照
首先,我意识到我的痛苦完全是自己造成的 在将某些包移动到Packrat图书馆可以';拆开包装后,不得进行快照,r,packrat,R,Packrat,首先,我意识到我的痛苦完全是自己造成的 在将某些包移动到external.packages选项时,我首先使用remove.packages()从packrat卸载了它们,而不是按照包作者的建议packrat::clean() 项目中的代码工作正常(因为在会话中正确加载了外部包),但从那时起就无法更新库。如果尝试执行快照,则会出现以下错误 Error: Unable to retrieve package records for the following packages: - "knitr",
external.packages
选项时,我首先使用remove.packages()
从packrat卸载了它们,而不是按照包作者的建议packrat::clean()
项目中的代码工作正常(因为在会话中正确加载了外部包),但从那时起就无法更新库。如果尝试执行快照,则会出现以下错误
Error: Unable to retrieve package records for the following packages:
- "knitr", "rmarkdown"
我试着重新安装软件包,packrat冲我吼了一声
Warning in install.packages :
packages ‘knitr’, ‘rmarkdown’ are in use and will not be installed
因此,我尝试使用clean(c('knitr','rmarkdown'),force=TRUE)
调用适当的函数,但在收到此消息时仍然没有出路
Error in find.package(pkgs, lib) :
there are no packages called ‘knitr’, ‘rmarkdown’
我试图检查packrat库中是否实际存在这些包,它们确实存在
> .libPaths()
[1] "C:/Users/Admn/Documents/.../cct/packrat/lib/x86_64-w64-mingw32/3.5.1"
[2] "C:/Users/Admn/Documents/.../cct/packrat/lib-ext/x86_64-w64-mingw32/3.5.1"
[3] "C:/Users/Admn/Documents/.../cct/packrat/lib-R/x86_64-w64-mingw32/3.5.1"
> c('knitr', 'rmarkdown') %in% .packages(all.available = TRUE)
[1] TRUE TRUE
> c('knitr', 'rmarkdown') %in%
list.dirs(.libPaths()[2], full.names = FALSE, recursive = FALSE)
[1] TRUE TRUE
我很想用unlink()
从库目录中手动拉出这两个文件夹,但我怀疑最终可能会产生更多问题
如果可以避免的话,我不想重新安装整个packrat库——所有的500MB——因为我可以访问速度非常慢、价格昂贵的互联网。有人知道如何走出这一困境吗?似乎是同一个问题。您可能有一个依赖于knitr
和/或rmarkdown
的包。在使用外部包的情况下,似乎没有解决此问题的方法
我试着重新安装软件包,packrat冲我吼了一声
您是在使用packratpackrat::on()的同一个会话中完成的吗?在这种情况下,您的.libPaths()
已更改,并且
。。。进入packrat模式时从用户库加载
在更改.libPaths()
之前。例如,我在我的一个项目中得到了以下信息
packrat::get_opts(“external.packages”)
#R[1]“BH”
“BH”%in%.packages(all.available=TRUE)
#R[1]正确
“BH”%in%list.dirs(.libpath()[1]),请注意
full.names=FALSE,recursive=FALSE)
#R[1]错误
.libPaths()
#R[1]“/My/Path/To/My project/packrat/lib/x86_64-w64-mingw32/3.5.1”
#R[2]“/My/Path/To/My project/packrat/lib ext/x86_64-w64-mingw32/3.5.1”
#R[3]“/My/Path/To/My project/packrat/lib-R/x86_64-w64-mingw32/3.5.1”
packrat::off()
.libPaths()
#R[1]“/My/Path/To/R/win library/3.5”
#R[2]“C:/Program Files/R/R-3.5.1/库”
“BH”%in%list.dirs(.libpath()[1]),请注意
full.names=FALSE,recursive=FALSE)
#R[1]正确
在这里,我关闭packrat返回我的用户库,在那里我可以通过remove.packages
卸载BH
,从help(“remove packages”)
lib
一个字符向量,给出要从中删除包的库目录。如果缺少,则默认为.libpath()
中的第一个元素
由于参数lib.loc
的默认值为
packrat:::libDir(NULL)
#R [1] "/My/Path/To/My-project/packrat/lib/x86_64-w64-mingw32/3.5.1"
更新
这个问题可以通过Github问题中所示的expert.dependencies
参数packrat::snapshot
来解决。我最近对这个项目有一些用处,因此我将重新讨论它,并牢记您的贡献,让您知道它是如何进行的。谢谢