CheckBuilt = TRUE
особенно полезен для крупных обновлений, таких как 2.14.0, которые принесли большие изменения в пространствах имен.Пакеты без пространства имен, созданного с помощью предыдущей версии R, необходимо перекомпилировать, иначе они вообще не будут загружаться.Поэтому, если у вас есть такой пакет (например, ICE ), установленный в R 2.13, и вы обновляетесь до R 2.14, вы больше не сможете его загрузить:
> library(ICE)
Error in library(ICE) :
package ‘ICE’ does not have a NAMESPACE and should be re-installed
Поскольку более новой версии с пространством имен не существует, 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. Вы не можете сделать вывод о такой ошибке в segfault.И вообще, если CheckBuilt = TRUE
обновил его, это означает, что он был построен в предыдущей версии R.