更新R中的包 - checkBuilt的影响= TRUE或FALSE

Ite*_*tor 8 installation r

我已经查看了帮助update.packages(..., checkBuilt = TRUE),我不明白为什么人们不希望TRUE作为默认值.默认是FALSE.

这个问题有两个部分.(1)有人可以给使用这种说法和理由的任一个明确的解释FALSETRUE

据我所知,如果一个更新R,那么这可能有不同的结果 - 如果包没有更新,那么FALSE不会导致本地库被更新的包修改,同时TRUE将导致更多(所有?)包得到更新.默认选项(FALSE)可以提供速度优势 - 更新的包将更少.稳定性是不确定的 - 新版本的R可能在新软件包中运行得更好,或者可能没有(例如,如果新软件包中存在回归/错误),并且它可能适用于或不适用于早期版本的软件包(不保证向后兼容性).其他利弊对我来说并不明显.(我可能在这里错了 - 这就是为什么我要求澄清作为第1部分.)

(2)但是,如果没有更改R的安装版本,那么这些结果是否应该相同?看一下这个帖子的例子似乎只是调用已update.packages()创建的问题,即使R的版本没有改变.

Cal*_*imo 8

CheckBuilt = TRUE对于2.14.0这样的主要升级特别有用,它在名称空间中带来了很大的变化.没有使用以前版本的R构建的命名空间的包必须重新编译,否则它们根本不会加载.因此,如果你在R 2.13中安装了这样的软件包(例如ICE),并且你更新到R 2.14,你将无法再加载它:

> library(ICE)
Error in library(ICE) : 
  package ‘ICE’ does not have a NAMESPACE and should be re-installed
Run Code Online (Sandbox Code Playgroud)

由于没有更新版本的命名空间,update.packages()将不会升级它CheckBuilt = TRUE.所以说update.packages(checkBuilt = TRUE),你清楚地说,升级所有的包,如果:

  • CRAN上有一个更新版本
  • 如果包是使用旧版本的R构建的,请重新安装该包.

不会修改在相同版本的R中编译的软件包,也不会修改CRAN上没有升级的软件包.CheckBuilt实际上意味着"如果在旧版本中编译则重新安装",而不是"重新安装所有软件包".

为什么默认为FALSE?我猜它给CRAN带来了巨大的负担,大部分时间都没有必要:经过一次小的升级(即R 2.13.0到2.13.1),我从未见过这个问题.我肯定会建议在2.13.1到2.14.0等任何重大升级之后再进行此操作.

我相信你在(2)中提到的具体案例是一个例外.它涉及升级使用apt而不是R安装的软件包.你无法真正得出这样一个段错误的结论.无论如何,如果CheckBuilt = TRUE升级它,它意味着它是在以前版本的R中构建的.