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冲我吼了一声

您是在使用packrat
packrat::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
来解决。

我最近对这个项目有一些用处,因此我将重新讨论它,并牢记您的贡献,让您知道它是如何进行的。谢谢