在R中发现了段错误

时间:2014-09-04 18:49:17

标签: r

每次尝试从caught segfault包(1.0.0)运行任何绘图函数时,我都会收到ggplot2错误。我已经使用qplotgeom_dotplotgeom_histogram等尝试了此操作。来自包的数据(例如diamondseconomics)工作正常。

我在Mac OS 10.9.4(最新版本)和R 3.1.1(也是最新版本)上运行。我从标准的R GUI,RStudio和从命令行使用R时得到了同样的错误。该命令将显示默认图形设备(Quartz for R GUI和命令行),但也会显示终端错误。

library(ggplot2)
qplot(1:10)

给我错误:

*** caught segfault ***
address 0x18, cause 'memory not mapped'

Traceback:
 1: .Call("plyr_split_indices", PACKAGE = "plyr", group, n)
 2: split_indices(scale_id, n)
 3: scale_apply(layer_data, x_vars, scale_train, SCALE_X, panel$x_scales)
 4: train_position(panel, data, scale_x(), scale_y())
 5: ggplot_build(x)
 6: print.ggplot(list(data = list(), layers = list(<environment>),     scales = <S4 object of class "Scales">, mapping = list(x = 1:3),     theme = list(), coordinates = list(limits = list(x = NULL,         y = NULL)), facet = list(shrink = TRUE), plot_env = <environment>,     labels = list(x = "1:3", y = "count")))
 7: print(list(data = list(), layers = list(<environment>), scales = <S4 object of class "Scales">,     mapping = list(x = 1:3), theme = list(), coordinates = list(        limits = list(x = NULL, y = NULL)), facet = list(shrink = TRUE),     plot_env = <environment>, labels = list(x = "1:3", y = "count")))

Possible actions:

 1: abort (with core dump, if enabled)
 2: normal R exit
 3: exit R without saving workspace
 4: exit R saving workspace

这是我的会话信息:

R version 3.1.1 (2014-07-10)
Platform: x86_64-apple-darwin13.1.0 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

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

other attached packages:
[1] ggplot2_1.0.0 marelac_2.1.3 seacarb_3.0   shape_1.4.1   beepr_1.1     birk_1.1     

loaded via a namespace (and not attached):
[1] audio_0.1-5      colorspace_1.2-4 digest_0.6.4     grid_3.1.1       gtable_0.1.2    
[6] MASS_7.3-34      munsell_0.4.2    plyr_1.8.1       proto_0.3-10     Rcpp_0.11.2     
[11] reshape2_1.4     scales_0.2.4     stringr_0.6.2    tools_3.1.1

我从其他人那里收集到这是某种内存问题,但即使我有超过2 GB的可用内存空间,也会出现此错误。我知道这是一个广泛使用的软件包,所以当然这对每个人都没有发生,但为什么它会发生在我身上呢?有谁知道我能做些什么来解决这个问题?

3 个答案:

答案 0 :(得分:39)

如果其他人在将来遇到此问题或类似问题,我会向软件包维护者发送错误报告,他建议卸载所有已安装的软件包并重新开始。我接受了他的建议并且有效!

我遵循了这篇文章的建议:http://r.789695.n4.nabble.com/Reset-R-s-library-to-base-packages-only-remove-all-installed-contributed-packages-td3596151.html

ip <- installed.packages()
pkgs.to.remove <- ip[!(ip[,"Priority"] %in% c("base", "recommended")), 1]
sapply(pkgs.to.remove, remove.packages)

答案 1 :(得分:2)

这不是这个问题的答案,但它可能对某人有帮助。 (灵感来自user1310503。谢谢!)

我正在处理一个带有三个cols的data.frame df:col1,col2,col3。 最初,

df =data.frame(col1=character(),col2=numeric(),col3=numeric(),stringsAsFactors = F)

在此过程中,rbind多次使用,例如:

aList<-list(col1="aaa", col2 = "123", col3 = "234")
dfNew <- as.data.frame(aList)
df <- rbind(df, dfNew)

最后,df通过data.table :: fwrite

写入文件
data.table::fwrite(x = df, file = fileDF, append = FALSE, row.names = F, quote = F, showProgress = T)

df有5973行和3列。 “抓住段错误”总是会发生:

address 0x1, cause 'memory not mapped'. 

此问题的解决方案是:

aList<-list(col1=as.character("aaa"), col2 = as.numeric("123"), col3 = as.numeric("234"))
dfNew <- as.data.frame(aList)
dfNew$col1 <- as.characer(dfNew$col1)
dfNew$col2 <- as.numeric(dfNew$col2)
dfNew$col3 <- as.numeric(dfNew$col3)
df <- rbind(df, dfNew)

然后这个问题就解决了。可能的原因是cols的类别不同。

答案 2 :(得分:1)

这不是这个问题的答案,但它可能对某些人有用。当我pdf创建PDF图形设备然后使用plot时,我遇到了段错误。这种情况发生在R 2.15.3,3.2.4和一个或两个其他版本上,运行在Scientific Linux版本6.7上。我尝试过很多不同的事情,但我能让它发挥作用的唯一方法是:(a)使用pngtiff代替pdf,或者(b)保存大.RData }文件,然后使用一个完全独立的R程序来创建图形。