前言
在R里面安装R包时总会遇到这样那样的报错,非常烦人,为了避免以后少踩坑,我决定在遇到报错后及时将报错信息与解决办法记录下来,积少成多,希望自己解决bug的能力越来越强,也希望能让大家少走弯路。
报错1:Error in if (nzchar(SHLIB_LIBADD)) SHLIB_LIBADD else character() : argument is of length zero
报错信息解读:Error in if (nzchar(SHLIB_LIBADD)) SHLIB_LIBADD else character() : argument is of length zero
,这种报错的原因是Makeconf
文件里面没有内容,是空文件,这种报错常见于用conda安装的R,在用conda创建了一个环境然后安装R,就有可能出现Makeconf文件是空的情况。
具体情况记录:我用conda创建了一个tf2
环境,其目录是~/Programs/anaconda3/envs/tf2
,然后我在tf2
环境下使用命令conda install R
安装了一个R,但是在R里面安装packages的时候报了上面的错,那么需要替换该环境下的Makeconf
文件,
tf2
环境下的Makeconf
在如下路径:
~/Programs/anaconda3/envs/tf2/lib/R/etc
经过使用命令find ~ -name Makeconf
查找,我发现conda自带了两个Makeconf
文件,路径如下:
~/Programs/anaconda3/pkgs/r-base-3.6.1-h9bb98a2_1/lib/R/etc/Makeconf
~/Programs/anaconda3/pkgs/r-base-3.6.1-haffb61f_2/lib/R/etc/Makeconf
# 目前我还没仔细检查这两个Makeconf文件的区别
解决办法:将这两个Makeconf
文件中的任意一个复制到tf2
环境下,执行命令如下:
cp ~/Programs/anaconda3/pkgs/r-base-3.6.1-haffb61f_2/lib/R/etc/Makeconf ~/Programs/anaconda3/envs/tf2/lib/R/etc/Makeconf
强烈建议大家使用find ~ -name Makeconf
命令来查找自己的Makeconf文件路径,然后进行替换,请勿复制我的Makeconf路径。