将旧R版本包复制到包含新版本包的新文件夹中是否正确?

问题描述 投票:0回答:2

我安装了最新版本的 r 3.5.0 并复制了旧版本 3.4.3 中的所有软件包,并将它们粘贴到当前版本文件夹 3.5 中 我认为这不是复制和粘贴软件包的好方法,因为 RStudio 要求我重新安装我调用的软件包。例如,当我安装动物园时,它给了我这个错误:

Error: package or namespace load failed for ‘zoo’:
package ‘zoo’ was installed by an R version with different internals; it 
needs to be reinstalled for use with this R version

我应该怎样做才能正确复制它们?

r package
2个回答
13
投票

为新版本的 R 重新构建包比应对它们要安全得多。

重新构建所有包的最简单方法是将旧版本 R 中的包列表保存在文件中,然后将其加载到新版本 R 中并安装它们:

# In old version of R:
ip <- installed.packages()[,1]
write(ip,"rpackages_in_3.4.3.txt")
q()

# In new version of R:
ip_3.4.3 <- readLines("rpackages_in_3.4.3.txt")
setRepositories(graphics=FALSE, ind=1:6)
install.packages(ip_3.4.3)

还有一个包 installr 可能对此有用: https://cran.r-project.org/web/packages/installr/installr.pdf


8
投票

编辑 2024:请注意,自 R 4.2.0 以来,情况并非如此。以下常见问题解答的链接可提供截至撰写本文时当前正确的建议。


至少对于Windows,或许还有其他人,你所做的加上@Ben Bolker建议的正是手册所说的大多数人应该做的:

对于大多数人来说,最好的办法是将所有已安装的软件包复制到新安装中的库文件夹中,在新的 R 中运行 update.packages(checkBuilt=TRUE, Ask=FALSE),然后删除任何内容旧安装的左侧。

来自:https://cran.r-project.org/bin/windows/base/rw-FAQ.html#What_0027s-the-best-way-to-upgrade_003f

但是,他们也通过说这是“品味问题”来限定这一点,因此,如果您找到另一种适合您的方法,我只是想指出您尝试的方法是有效的,甚至是文档建议的.

更新:我刚刚在自己的系统上更新了 R,并且由于我为我的包使用了固定位置(即路径中没有版本号),我什至没有将它们从一个地方复制到另一个地方,我只做了

update.packages(checkBuilt = TRUE, ask = FALSE) 
部分,工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.