附录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,然后执行下面的命令:

  1. oldip <- installed.packages()[,1]
  2. save(oldip, file="path/installedPackages.Rdata")

其中path是R之外的目录。

  • 下载安装新版的R。

  • 如果在第1步保存了自定义的Rprofile.site文件,现在把它复制到新的R中。

  • 启动新版本的R,然后执行下面的命令:

  1. load("path/installedPackages.Rdata")
  2. newip <- installed.packages()[,1]
  3. for(i in setdiff(oldip, newip))
  4. install.packages(i)

其中path是第2步中设置的位置。

  • 删除旧版本(可选)。

这种方法只能安装CRAN上的扩展包,不会安装从其他地方获取的包。你需要自行寻找和下载这些包。不过,你可以知道哪些包不能安装。我在上次安装R时发现不能找到globaltestBiobase。因为我是从Bioconductor网站上安装这两个扩展包的,能用下面的命令安装:

  1. source(http://bioconductor.org/biocLite.R)
  2. biocLite("globaltest")
  3. 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比想象的要复杂得多。我希望能有一天,这个附录只需要一句话:“选择检查更新选项。”