R4.2.0运行rrpack包出现.Call函数不可用报错如何解决
问题描述
- 运行环境:R 4.2.0
- 使用包:rrpack
- 触发过程:初始环境下Rcpp版本为1.0.6,缺少rrpack运行所需依赖函数,手动将Rcpp升级至1.0.8.3后,加载运行rrpack触发以下报错:
Error in .Call("_rrpack_lasso_shooting", PACKAGE = "rrpack", xtx, xty, : "_rrpack_lasso_shooting" not available for .Call() for package "rrpack"
- 已排查内容:
- 现有公开的同类报错解决方案均面向包开发者,常见修复点为NAMESPACE文件缺失
dynLib(packagename)配置 - 检查roxygen2生成的相关配置文件未发现异常,无适配普通终端用户场景的解决方案
- CRAN平台当前rrpack包的全环境官方检查结果均为正常,无法确认问题是否可在用户侧修复
- 现有公开的同类报错解决方案均面向包开发者,常见修复点为NAMESPACE文件缺失
解决方案
这个报错在普通用户场景下,核心原因是升级核心编译依赖Rcpp后,原已安装的rrpack是基于旧版Rcpp预编译的二进制版本,C++接口符号不匹配,和包开发场景下配置错误触发的报错提示完全一致,不需要修改包内部配置,按以下顺序操作即可修复:
- 彻底清理旧版本残留
完全退出R会话后重新打开,不要加载历史工作空间,执行命令卸载现有rrpack:remove.packages("rrpack") - 源码重装rrpack匹配现有Rcpp版本
提前配置好编译环境:Windows用户安装对应R4.2版本的Rtools并添加到系统PATH,macOS用户执行xcode-select --install安装Xcode命令行工具,之后执行命令从源码编译安装rrpack,自动适配当前已升级的Rcpp版本:install.packages("rrpack", type = "source") - 若仍报错,同步更新所有编译类依赖
执行全量源码更新,保证所有带C++编译组件的依赖包版本和当前Rcpp版本对齐,更新完成后重复前两步操作:update.packages(ask = FALSE, type = "source") - 备选方案:回退Rcpp版本
如果当前环境下源码编译始终失败,可以直接将Rcpp回退到初始的1.0.6版本,从CRAN归档目录下载Rcpp 1.0.6源码包本地安装即可,无需升级Rcpp也能正常运行rrpack。
验证方法:安装完成后执行
library(rrpack),无报错即修复完成。
内容的提问来源于stack exchange,提问作者l_win
相关产品推荐
相关产品推荐

