macOS下调用partitions包listParts函数致R/RStudio崩溃
问题现象
在macOS Monterey 12.2.1环境下,无论传入何种参数,调用partitions包的listParts()函数都会直接造成R及RStudio崩溃,相同代码在Windows设备上可正常运行。
当前运行环境信息:
- 操作系统:macOS Monterey 12.2.1
- R版本:4.2.0 GUI 1.78 High Sierra build
- RStudio版本:2022.2.3.492
可复现代码
library(partitions) myVec <- c(1:3) partitions::listParts(length(myVec))
报错信息与回溯栈
运行上述代码触发的核心报错:
*** caught illegal operation *** address 0x119c1cbfe, cause 'illegal opcode'
崩溃时的调用回溯栈:
Traceback: 1: as.bigz(1) 2: .fac(sum(x)) 3: setparts(x) 4: partitions::listParts(myVec)
排查解决方法
从回溯栈可以定位,崩溃触发点在partitions的依赖包gmp的as.bigz()调用,本质是CRAN提供的对应R 4.2版本的macOS平台gmp二进制包,编译时启用了部分老旧Intel Mac设备不支持的CPU指令集,运行时触发非法操作错误,和代码本身逻辑无关,可通过以下方式解决:
- 先安装Xcode命令行编译工具,打开终端执行
xcode-select --install,按照弹窗提示完成安装即可。 - 如果本地没有安装homebrew的gmp系统依赖,终端执行
brew install gmp完成依赖部署。 - 打开R,执行
install.packages(c("gmp", "partitions"), type = "source"),从源码重新编译安装两个包,编译过程会自动适配当前设备CPU支持的指令集,安装完成后即可正常调用listParts()函数,不会触发崩溃。 - 如果暂时不想配置编译环境,可将R版本降级到4.1.x稳定版,对应版本的gmp、partitions二进制包不存在该指令集兼容问题,可直接正常使用。
内容的提问来源于stack exchange,提问作者Rosalie Samide
相关产品推荐
相关产品推荐

