R中安装kernlab包失败,编译dcauchy.c时出现语法错误
解决kernlab在R 3.5.2 + Debian 10下编译失败的问题
问题原因
编译dcauchy.c时出现的expected ‘)’ before ‘FCONE’错误,是因为新版kernlab源码使用了R 3.6及以上版本才引入的FCONE宏定义,而你的R版本是3.5.2,不支持这个宏,导致语法解析失败。
解决办法
1. 安装兼容旧版R的kernlab归档版本
kernlab的0.9-29版本及更早版本适配R 3.5.x。你可以到CRAN的kernlab归档区找到该版本的源码包,下载到本地后执行以下命令安装:
install.packages("本地下载的kernlab_0.9-29.tar.gz文件路径", repos = NULL, type = "source")
2. 手动修改源码后编译安装
如果需要使用新版kernlab,可通过修改源码兼容旧R版本:
- 下载kernlab源码包并解压,进入
kernlab/src目录 - 打开
dcauchy.c文件,将所有出现FCONE的位置替换为(1)(FCONE在新版R中的定义就是(1)) - 回到kernlab源码根目录,在R中执行:
install.packages("./kernlab", repos = NULL, type = "source")
3. 升级R版本(长期解决方案)
Debian 10可以升级到R 4.x版本,这样就能直接安装最新版kernlab:
- 添加CRAN的Debian源(终端执行):
echo "deb https://cloud.r-project.org/bin/linux/debian buster-cran40/" | sudo tee /etc/apt/sources.list.d/cran.list sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key '95C0FAF38DB3CCAD0C080A7BDC78B2DDEABC47B7'
- 更新系统并升级R:
sudo apt update sudo apt install r-base r-base-dev
升级完成后,直接在R中执行install.packages("kernlab")即可正常安装。
内容的提问来源于stack exchange,提问作者Alvin H.
相关产品推荐
相关产品推荐

