捕捉到R中的segfault错误

捕捉到R中的segfault错误,r,R,每次尝试从ggplot2软件包(1.0.0)运行任何绘图功能时,我都会收到一个catch segfault错误。我用qplot,geom\u点图,geom\u柱状图,等等进行了尝试。包中的数据(例如钻石或经济)工作正常 我在MacOS10.9.4(最新版本)和R3.1.1(也是最新版本)上操作。我在标准R GUI、RStudio和从命令行使用R时也会遇到同样的错误。该命令会显示默认图形设备(Quartz用于R GUI和命令行),但也会显示终端错误 library(ggplot2) qplot(1

每次尝试从
ggplot2
软件包(1.0.0)运行任何绘图功能时,我都会收到一个
catch segfault
错误。我用
qplot
geom\u点图
geom\u柱状图
,等等进行了尝试。包中的数据(例如
钻石
经济
)工作正常

我在MacOS10.9.4(最新版本)和R3.1.1(也是最新版本)上操作。我在标准R GUI、RStudio和从命令行使用R时也会遇到同样的错误。该命令会显示默认图形设备(Quartz用于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

我从其他人那里得知,这是某种内存问题,但即使我有超过2GB的可用RAM,也会发生此错误。我知道这是一个被广泛使用的软件包,所以当然这不会发生在每个人身上,但为什么会发生在我身上呢?有人知道我能做些什么来解决这个问题吗?

如果将来有人遇到这个问题或类似问题,我会向软件包维护人员发送一份错误报告,他建议卸载所有已安装的软件包并重新开始。我接受了他的建议,结果成功了

我听从了这个帖子的建议:


ip这不是对这个问题的回答,但可能对某些人有用。当我创建一个pdf图形设备,然后使用
plot
时,出现了一些错误。这发生在运行在Scientific Linux 6.7版上的R2.15.3、3.2.4和其他一两个版本上。我尝试了许多不同的方法,但我能让它工作的唯一方法是(a)使用
png
tiff
而不是
pdf
,或者(b)保存大型
.RData
文件,然后使用完全独立的R程序来创建图形

这不是对这个问题的回答,但它可能对某些人有所帮助。(灵感来自用户1310503。谢谢!)

我正在用三个col处理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有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)

aListSo如果您启动一个全新的R会话并仅运行这两个命令(
library(ggplot2);qplot(1:10)
),您会收到该错误吗?运行
library(ggplot2)
后,您能否将
sessionInfo()的输出也添加到您的问题中。@MrFlick,是的,这是正确的。此错误发生在全新的R会话期间<添加代码>会话信息
输出。何时何地加载“marelac_2.1.3、seacarb_3.0、shape_1.4.1、Beeper_1.1 birk_1.1”软件包?您是否在某处设置了
.Rprofile
?当您启动R时,它是否正在还原已保存的工作区(工作目录中是否有
.Rdata
文件)?@MrFlick,所有这些包都是从
.Rprofile
加载的,是的。但是,即使删除
.Rprofile
,也会出现同样的问题。R没有还原已保存的工作区。因此,这是一个开始。您是否安装了为SL版本开发的ggplot2二进制文件?然后您可以使用
sapply(pkgs.to.remove,install.packages)重新安装它们。
我也遇到了类似的问题(使用IRKernel/rzmq),但卸载重新安装的软件包没有帮助;请参阅:。@CephBirk关于未从CRAN安装的软件包的情况如何:)?然后
install.packages
就我而言,它不起作用。我的错误与
utils::download.file
有关,仅在运行
devtools::test()
时失败,并且仅在从rstudio完成时失败。我实现的解决方案只是使用
system(“wget…”)
而不是download.file。如果你能找到解决方法或原因,请告诉我。这很有趣。只有当内存中有一个非常大的对象时,我才得到SEGFULTS(这个对象没有在
plot
命令中使用)。你也一样吗?因此,我的另一个想法是将大对象保存到磁盘并从内存中删除,或者在执行
pdf
之前,或者在
pdf
plot
之间,然后重新加载它。但我还没有尝试过这个,因为它需要一些重写。在我的例子中,我没有任何大型对象。在运行“plot(1:10)”命令之前,我显式地运行了一个“gc()”来强制垃圾收集,并检查了可用内存。当时它有超过20GB的空闲内存,这正是我想要的。我没有确保我的列在rbind()之前以相同的顺序出现。只需像rbind()之前那样对列重新排序即可解决此问题。
data.table::fwrite(x = df, file = fileDF, append = FALSE, row.names = F, quote = F, showProgress = T)
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)