附录H 更新R
作为消费者,我们理所当然地认为可以通过一个检查更新按钮升级软件。在第1章中,我们知道update.packages()
可以下载和安装最新版的第三方扩展包。不过,并没有相应的函数来升级R自身。如果要将R 4.1.0升级到R 5.1.1,必须得动动脑子。(在我写这本书时,最新的版本是2.13.0,但我希望这本书能够跟上未来若干年的发展。)
从CRAN(http://cran.r-project.org/bin/)下载和安装最新版的R是比较简单的。麻烦的地方是要重新设置各种自定义选项(包括之前安装的扩展包)。在当前所使用的R中,我安装了248个扩展包。我真心不想在升级R的时候把这些扩展包的名字一个个写下来,然后手动地重新安装。
在网络上有很多关于如何高效优雅地更新R的讨论。下面介绍的方法既不优雅,也不高效,但我发现它在各种系统(Windows、Mac和Linux)上都可以使用。
在这里,我们用installed.packages()
函数保存R目录树之外的扩展包清单,然后根据这个清单用install.packages()
函数将最新版的扩展包下载和安装到新版R中。操作步骤如下。
如果有自定义的Rprofile.site文件(见附录B),将其保存到R目录树之外。
启动当前版本的R,然后执行下面的命令:
oldip <- installed.packages()[,1]
save(oldip, file="path/installedPackages.Rdata")
其中path
是R之外的目录。
下载安装新版的R。
如果在第1步保存了自定义的Rprofile.site文件,现在把它复制到新的R中。
启动新版本的R,然后执行下面的命令:
load("path/installedPackages.Rdata")
newip <- installed.packages()[,1]
for(i in setdiff(oldip, newip))
install.packages(i)
其中path
是第2步中设置的位置。
- 删除旧版本(可选)。
这种方法只能安装CRAN上的扩展包,不会安装从其他地方获取的包。你需要自行寻找和下载这些包。不过,你可以知道哪些包不能安装。我在上次安装R时发现不能找到globaltest
和Biobase
。因为我是从Bioconductor网站上安装这两个扩展包的,能用下面的命令安装:
source(http://bioconductor.org/biocLite.R)
biocLite("globaltest")
biocLite("Biobase")
第6步可以选择将老版本的R删除。在Windows系统上可以同时安装多个版本的R。如果需要的话,可以通过Start > Control Panel > Uninstall a Program
卸载旧版本的R。在Mac和Linux系统上,新版的R会覆盖老版本。在Mac上要删除剩余的东西,可以用Finder打开/Library/Frameworks/R.frameworks/versions/,删除其中旧版本的文件夹。在Linux系统上,不需要做任何额外的操作。
显然,更新R比想象的要复杂得多。我希望能有一天,这个附录只需要一句话:“选择检查更新选项。”