按顺序加载“xlsx”和“插入符号”时,R 因分段错误而意外死亡

Posted

技术标签:

【中文标题】按顺序加载“xlsx”和“插入符号”时,R 因分段错误而意外死亡【英文标题】:R dies unexpectedly with segmentation fault when loading 'xlsx' and 'caret' in that order 【发布时间】:2017-12-14 14:01:14 【问题描述】:

当我加载xlsx 后跟caret 时,Rsegmentation fault 一起死掉。

> library("xlsx")
Loading required package: rJava
Loading required package: xlsxjars
> library(caret)
Loading required package: lattice
Loading required package: ggplot2
Segmentation fault (core dumped)

但是,如果我先加载caret,然后加载xlsx,R 可以正常工作。

> library(caret)
Loading required package: lattice
Loading required package: ggplot2
> library("xlsx")
Loading required package: rJava
Loading required package: xlsxjars
> 

知道可能出了什么问题吗?

更新:

OS: CentOS 6.9
R:  3.2.5
R configured with: 
./configure --enable-R-shlib CFLAGS=-fPIC --with-cairo --with-libpng --with-jpeglib --with-libtiff --with-system-zlib --with-system-pcre --with-system-xz --with-tcltk

devtools.SessionInfo 输出

> sessionInfo()
R version 3.2.5 (2016-04-14)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: CentOS release 6.9 (Final)

locale:
 [1] LC_CTYPE=en_US.utf8          LC_NUMERIC=C                
 [3] LC_TIME=en_US.utf8           LC_COLLATE=en_US.utf8       
 [5] LC_MONETARY=en_US.utf8       LC_MESSAGES=en_US.utf8      
 [7] LC_PAPER=en_US.utf8          LC_NAME=en_US.utf8          
 [9] LC_ADDRESS=en_US.utf8        LC_TELEPHONE=en_US.utf8     
[11] LC_MEASUREMENT=en_US.utf8    LC_IDENTIFICATION=en_US.utf8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] randomForest_4.6-12 class_7.3-14        xlsx_0.5.7         
 [4] xlsxjars_0.6.1      rJava_0.9-8         MASS_7.3-47        
 [7] TTR_0.23-1          caret_6.0-76        ggplot2_2.2.0      
[10] lattice_0.20-34     devtools_1.13.2    

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.8        nloptr_1.0.4       plyr_1.8.4             iterators_1.0.8   
 [5] tools_3.2.5        xts_0.10-0         digest_0.6.10      lme4_1.1-12       
 [9] memoise_1.0.0      tibble_1.2         nlme_3.1-128       gtable_0.2.0      
[13] mgcv_1.8-16        Matrix_1.2-7.1     foreach_1.4.3      parallel_3.2.5    
[17] SparseM_1.74       withr_1.0.2        stringr_1.1.0      MatrixModels_0.4-1
[21] stats4_3.2.5       grid_3.2.5         nnet_7.3-12        minqa_1.2.4       
[25] reshape2_1.4.2     car_2.1-3          magrittr_1.5       scales_0.4.1      
[29] codetools_0.2-15   ModelMetrics_1.1.0 splines_3.2.5      assertthat_0.1    
[33] pbkrtest_0.4-6     colorspace_1.3-1   quantreg_5.29      stringi_1.1.2     
[37] lazyeval_0.2.0     munsell_0.4.3      zoo_1.7-13        

【问题讨论】:

@Eric 有趣的评论。我有四个问题。 1. 您能否详细说明 xlsx 如何毒化配置以防止插入符号加载?例如,它将更改哪些参数以导致加载插入符号的问题。 2. 这类问题是否有解决方案,或者由于 R 设计内部的一些内在缺陷而无法解决? 3、如果可以修复,R社区的开发者知道这个问题吗?他们有任何修复它的计划吗?如果 R 不好,那么您建议用哪种语言来替换 R?非常感谢。 【参考方案1】:

如果有人遇到这个问题,我可以使用 XLSX 的开发版修复它。对我来说这是更新到 10.13.5 后的问题

devtools::install_github('dragua/xlsx', ref='7ed97ff')

那个库对我有用。奇怪的是我现在遇到了这个问题,在许多其他人报告 Ubuntu 问题整整 11 个月之后。

【讨论】:

以上是关于按顺序加载“xlsx”和“插入符号”时,R 因分段错误而意外死亡的主要内容,如果未能解决你的问题,请参考以下文章

使用混淆矩阵和插入符号统计的灵敏度和特异性的零 R 模型计算

简单的 C++ OpenCV imshow 示例因分段错误而崩溃

在 R 中加载 xlsx 库时出错 [重复]

Redshift 中的 COPY CSV 命令是不是按标题中定义的顺序加载?

当我尝试预测 R 中的类别概率时出错 - 插入符号

当一个单元格不是数字时,R 包 XLSX 将整列转换为字符串或布尔值