日常中使用R
语言进行数据分析,或者画图的读者,相信一定逃不过的一个操作就是安装R
包,那么在R
包安装过程中,可能会出现一些问题,有时候这些问题并不是R
包仓库下载过程中网络和R
语言本身的问题,而是系统中缺失一些配置或者编译器,本文将介绍一种常见的错误,并给以解决办法。
gfortran
最近一位读者,在进行常规的转录组分析时,要在R
中进行差异分析,因此需要安装DESeq2
这个包,但是在安装过程中出现上面了这种情况,导致包没有安装成功。细心的读者,可以看见,小编已经在上图中,用红色方框框选出来了,就是:/bin/gfortran: No such file or directory
。其实这个错误与/usr/bin/ld: cannot find -lxxxx
可以算是一类错误。R
在安装你所需要的包时,可能会需要进行编译,编译的过程中,需要使用一些系统中的编译器和库文件,如果缺失这些文件,就会导致包安装不上,其实R
中安装包,出现安装问题,大多都是这个原因(不包括包的版本之间出现冲突的情况)。下面就介绍如何解决这个错误。
首先检索安装过程中出现Error
的区域,查看有XXX: No such file or directory
或者cannot find -lxxxx
的区域,确定缺少的文件或者依赖是什么。下面以上面的gfortran
为例,进行排查和解决。
首先,我们需要检查系统中是否有对应的文件或者安装了依赖
# 在终端中,输入下面两条命令
# 读者在解决自己的错误时,请将`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 切换为国内源[1]
如果在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.2.版本检查
没有解决问题的话,就只有可能是软件的版本之间有冲突。对于这个例子的gfortran
,它很有可能与gcc
的版本之前存在冲突,因此需要将二者的版本安装为一致的。对于读者来说,想要确定冲突的软件,可以在百度中以需要安装的软件和冲突为关键词,确定可能冲突的软件。
gcc --version # 查看 gcc 版本
gfortran --version # 查看 gfortran 版本
# 如果不一致则,重新安装gcc或gfortran为一致版本,再重新安装R包即可。
★因此读者们在安装
R
包时,如果出现安装不成功的情况,一定要仔细阅读安装过程中打印出来的日志,查看问题的根源,在浏览器中检索,一般都有解决方案。 ”
[1]
Mac换源: https://cloud.tencent.com/developer/article/1614039