批量下载R包

在一个新服务器上重新安装一堆R包,估计是最让人头疼的事情之一了。

第一种方式,复制黏贴 library 文件夹

如果你在两个服务器中安装的 R 的版本相同,那么最简单的方式就是从旧服务器中R的目录中找到 library 文件夹(比如我的在 */miniConda/miniconda3/lib/R/library ),然后黏贴到新服务器的相同目录下(记得备份一下新服务器的 library 文件夹 ),如果你够幸运的话就没啥问题了。

但是我旧的R版本是 3.6 ,新的 R 版本是 4.0 ,复制黏贴过去运行R直接报错,这条路就不通了。

第二种方式,批量安装

1. 查找所有需要安装的 R 包

我采用下面的命令行,在脚本文件夹中便利所有内容,找到所有加载R包的语句

1
cat * | grep "library(" | sort | uniq

找到一堆 library(*) 的语句后,我是直接复制到 Excel 里,用 excel 的智能填充提取 R 包名称(快捷键为 ctrl+e), 然后用 f9 提取数组信息提取所有包名,简单处理后得到所有 R 包名称序列,如下。

1
all_packages <- c("*","*")

2. 简单区分R包来源并安装

我们通过 available.packages() 函数提取 CRAN 中所有可用的R包

1
ap <- available.packages() # cran 中所有可用的包

我们先简单地将需要安装的 R 包分为两类,如果在 ap 中则视为 CRAN 中的 R 包,采用 install.packages() 来安装;如果不在 ap 中则视为 Bioconductor 中的 R 包,采用 BiocManager::install() 命令来安装。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cran_packages <- all_packages[all_packages %in% rownames(ap)]
# length(cran_packages)

bio_packages <- all_packages[!(all_packages %in% rownames(ap))]
# length(bio_packages)


install.packages(cran_packages) # 一次性安装所有的 cran 包

if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")

BiocManager::install(bio_packages) # 一次性安装所有的 bioconductor 包

3. 确定哪些R包没有安装成功

将所有需要安装的R包,与所有已经安装的R包进行配对,确定哪些R包没有安装成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 所有已经安装的 R 包

installed_packages = row.names(installed.packages())

# 查看哪些 R 包还没有安装

no_cran_packages = cran_packages[!(cran_packages %in% installed_packages)]
no_cran_packages # 2 个 [1] "ggpubr" "car"

no_bio_packages = bio_packages[!(bio_packages %in% installed_packages)]
no_bio_packages # 0 个

install.packages(no_cran_packages) # 再来一次

BiocManager::install(no_bio_packages) # 再来一次

4. 需要特殊安装的 R 包

有些 R 包其实是从 GitHub 安装的,或者从别的地方安装,因此需要特殊安装一下。

如果你足够幸运的话,你到这一步应该就把所有的 R 包都安装好了,还有没装好的,估计就是遇到问题了。

5. 始终安装失败的包,手动下载安装

我有两个 CRAN 中的 R 包一直安装不下来,ggpubrcar , 本来打算手动安装。因为存在附属包的情况,所以手动安装往往需要 “套娃式” 安装。

1
2
3
4
5
6
7
8
9
# 手动安装 ggpubr, 事先安装 rstatix
R CMD INSTALL /mnt/data/zhouziwen/lib/R_packages/ggpubr_0.4.0.tar.gz

# 手动安装 car, 事先安装 pbkrtest lme4
R CMD INSTALL /mnt/data/zhouziwen/lib/R_packages/nloptr_2.0.0.tar.gz
R CMD INSTALL /mnt/data/zhouziwen/lib/R_packages/lme4_1.1-13.tar.gz
R CMD INSTALL /mnt/data/zhouziwen/lib/R_packages/pbkrtest_0.5.1.tar.gz
R CMD INSTALL /mnt/data/zhouziwen/lib/R_packages/car_3.0-12.tar.gz

并且,手动安装还是遇到了相同的报错。

1
2
CMake Error: The source directory "/tmp/RtmpGALOB5/R.INSTALL62081f90ce01/nloptr/src/nlopt-build" does not exist.
Specify --help for usage, or press the help button on the CMake GUI

此时,真正消耗时间和心情的步骤才来了,然后我就在网上搜索这个报错,没有找到清晰的答案(R 包安装不上的情况貌似一向如此,基本上找不到明白的答案,或者说别人的答案你试了可能还是没用)。

5.1 重装 cmake

然后一番东搞西搞以后,我发现有一个 cmake 软件,从 https://cmake.org/download/ 下载 cmake-3.22.2-linux-x86_64.tar.gz ,然后先解压

1
tar -zvxf cmake-3.22.2-linux-x86_64.tar.gz

解压以后,bin 文件夹中就有新的 cmake 软件,将这个 bin 文件夹加入到环境变量

1
export PATH="*/cmake-3.22.2-linux-x86_64/bin:$PATH"

之前的版本是 2.8 ,现在的版本如下,估计可能就是版本太低了。

1
2
3
4
5
$ cmake --version
cmake version 3.22.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

然后正常用 install.packages() 命令来安装 ggpubrcar 就正常了。

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2019-2022 Vincere Zhou
  • 访问人数: | 浏览次数:

请我喝杯茶吧~

支付宝
微信