1. 导读
日常中使用R 语言进行数据分析,或者画图的读者,相信一定逃不过的一个操作就是安装R 包,那么在R 包安装过程中,可能会出现一些问题,有时候这些问题并不是R 包仓库下载过程中网络和R 语言本身的问题,而是系统中缺失一些配置或者编译器,本文将介绍一种常见的错误,并给以解决办法。
2. 问题
最近一位读者,在进行常规的转录组分析时,要在R 中进行差异分析,因此需要安装DESeq2 这个包,但是在安装过程中出现上面了这种情况,导致包没有安装成功。细心的读者,可以看见,小编已经在上图中,用红色方框框选出来了,就是:/bin/gfortran: No such file or directory 。其实这个错误与/usr/bin/ld: cannot find -lxxxx 可以算是一类错误。R 在安装你所需要的包时,可能会需要进行编译,编译的过程中,需要使用一些系统中的编译器和库文件,如果缺失这些文件,就会导致包安装不上,其实R 中安装包,出现安装问题,大多都是这个原因(不包括包的版本之间出现冲突的情况)。下面就介绍如何解决这个错误。
3. 解决办法
首先检索安装过程中出现Error 的区域,查看有XXX: No such file or directory 或者cannot find -lxxxx 的区域,确定缺少的文件或者依赖是什么。下面以上面的gfortran 为例,进行排查和解决。
3.1. 安装
首先,我们需要检查系统中是否有对应的文件或者安装了依赖
# 在终端中,输入下面两条命令
# 读者在解决自己的错误时,请将`fortran`替换为自己对应的
ldconfig -p | grep fortran
which fortran
一种情况就是上图这种,文件本身是存在的,只不过系统在使用过程中,可能存在:
- 版本不对应。
- 系统无法找到文件正确的位置
如果出现上面这个情况,请直接看3.2. 版本检测 和3.3. 更新链接 。
如何出现上图这种,终端返回not found ,那么代表系统中是不存在该文件或依赖的。其实这种情况更好解决,只需要在终端中安装即可,操作如下:
# linux 下
sudo apt update # 更新
sudo apt install gfortran # 安装
# mac 下
brew install gcc # mac下 gcc 包含了 gfortran
# 读者需要将`gfortran`,换为自身缺失的软件,再去R中重新安装包即可。
注意:对于使用Mac 的读者,这边建议将brew 设置为国内源,可以参考:
Mac 下 brew 切换为国内源
3.2. 更新链接
如果在3.1.安装 中发现,依赖是存在的,那么很有可能是系统中文件的链接不对,只需要重新添加一个符合链接即可。
# 在3.1.的结果中,查看文件的原始位置,并建立链接
sudo ln -s /usr/lib/x86_64-linux-gnu/libgfortran.so.3 /usr/lib/x86_64-linux-gnu/libgfortran.so
# 此处地址由第一步检查而来
# 链接完了,可以去`R`中重新安装,如果报错请参考`3.3.版本检查`
3.3. 版本检查
如果3.2.版本检查 没有解决问题的话,就只有可能是软件的版本之间有冲突。对于这个例子的gfortran ,它很有可能与gcc 的版本之前存在冲突,因此需要将二者的版本安装为一致的。对于读者来说,想要确定冲突的软件,可以在百度中以需要安装的软件和冲突为关键词,确定可能冲突的软件。
gcc --version # 查看 gcc 版本
gfortran --version # 查看 gfortran 版本
# 如果不一致则,重新安装gcc或gfortran为一致版本,再重新安装R包即可。
因此读者们在安装R 包时,如果出现安装不成功的情况,一定要仔细阅读安装过程中打印出来的日志,查看问题的根源,在浏览器中检索,一般都有解决方案。
|