M1芯片还是得x86的R能控住

还记得在去中山之前,我刚拿到Imac不到一星期,配置电脑的时候发现一些R包死活装不上去,其中的代表就是edgeR,做差异分析的主流软件之一。

到中山以后,问了永和才知道原来M1芯片是需要安装Xcode command line tools和gfortran的,因此在回学校以后第一时间进行了安装,在随后加以配置成功实现了安装。

但是这几天想要装其他包的时候,又显示compilation failed,同时还有找不到gfortran的问题,但是在这期间我没有进行系统升级等操作。我尝试卸载掉edgeR再重新安装,发现装不上了,离了大谱。

make: /opt/R/arm64/bin/gfortran: No such file or directory
make: *** [mvt.o] Error 1
ERROR: compilation failed for package ‘mvtnorm’

于是我又去检查了gfortran,都没有什么问题,反复在终端和R里修改路径也无济于事。

wangzhe@wangzhedeiMac ~ % which gfortran     
/opt/homebrew/bin/gfortran

wangzhe@wangzhedeiMac ~ % cat ~/.r/Makevars 
CC=gcc$(VER)
CXX=g++$(VER)
CXX11=g++$(VER)
CXX14=g++$(VER)
CXX17=g++$(VER)
CFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
CXXFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
FLIBS=-L/opt/homebrew/opt/gcc/lib/gcc/11

既然R说/opt/R/arm64/bin/gfortran找不到,那我把gfortran移动过去不就找到了?

在检索的时候发现stackoverflow上有个外国网友也遇到了一样的问题(虽然我们的MacOS版本不同),刚好她也是这个思路。

从结果上看,在她移动了gfortran以后仍不能解决问题。最后她的解决办法是deleted everything and started over并且把gfortran目录移动到了R需要的路径,竟解决了问题。

另外,我还找到了思考问题的熊对此问题的思考。

总结下来就是:arm64架构R的坑好多,赶紧换成Intel的x86架构。

在arm64版本下(几乎)所有R包都需要通过编译才能使用。只要涉及到编译,各种不兼容和依赖问题就都来了。这是因为虽然R和Rsutido最新版本都已经支持M1芯片,但是bioconductor还没有支持,这样一来就无法直接安装编译好的R包版本。目前只需要使用Intel 版本的R,就可以避免编译以及随之而来的各种问题。

因此,我重新在R for macOS Developers下载了R,装包问题瞬间都烟消云散,世界又有了颜色。

经此一役,以后我也要秉承“无必要不升级”的法则了。

你可能感兴趣的:(M1芯片还是得x86的R能控住)