2014-09-04 6 views
25

Ich bekomme einen caught segfault Fehler jedes Mal, wenn ich versuche, alle Plotten Funktionen aus dem ggplot2 Paket (1.0.0) auszuführen. Ich habe das mit qplot, geom_dotplot, geom_histogram usw. versucht. Daten von der Verpackung (z. B. diamonds oder economics) funktionieren gut.aufgefangen segfault Fehler in R

Ich arbeite auf Mac OS 10.9.4 (die neueste Version) und auf R 3.1.1 (auch die neueste Version). Ich bekomme den gleichen Fehler mit der Standard R GUI, RStudio, und wenn Sie R von der Kommandozeile verwenden. Der Befehl ruft das Standardgrafikgerät (Quartz for R GUI und Befehlszeile), aber auch den Terminalfehler auf.

library(ggplot2) 
qplot(1:10) 

gibt mir den Fehler:

*** 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 

Hier ist meine Session Info:

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 

ich von anderen gesammelt habe, dass dies ein Speicherproblem von einer Art ist, aber das Fehler tritt auf, selbst wenn ich über 2 GB freien RAM habe. Ich weiß, dass dies ein weit verbreitetes Paket ist, also passiert das natürlich nicht für alle, aber warum passiert es für mich? Weiß jemand, was ich tun kann, um dieses Problem zu beheben?

+3

Wenn Sie also eine brandneue R-Sitzung starten und nur diese beiden Befehle ('library (ggplot2); qplot (1:10)') ausführen, erhalten Sie diesen Fehler? Können Sie die Ausgabe von 'sessionInfo()' nach dem Ausführen von 'library (ggplot2)' auch zu Ihrer Frage hinzufügen. – MrFlick

+0

@MrFlick, ja, das ist richtig. Dieser Fehler tritt während einer brandneuen R-Sitzung auf. 'sessionInfo'-Ausgabe wird hinzugefügt. – CephBirk

+1

Wo/wann werden die Pakete "marelac_2.1.3, seacarb_3.0, shape_1.4.1, beepr_1.1 birk_1.1" geladen? Hast du irgendwo ein '.Rprofile' eingerichtet? Wenn Sie R starten, wird ein gespeicherter Arbeitsbereich wiederhergestellt (gibt es eine '.Rdata' Datei im Arbeitsverzeichnis)? – MrFlick

Antwort

32

Falls jemand anderes dieses Problem oder ähnliches in der Zukunft hat, schickte ich einen Fehlerbericht an den Paketbetreuer und er empfahl, alle installierten Pakete zu deinstallieren und neu zu starten. Ich nahm seinen Rat und es hat funktioniert!

Ich folgte Rat von dieser Veröffentlichung: 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) 
+10

Sie können sie dann erneut mit 'sapply installieren (pkgs.to.remove, install.packages)' – slackline

+2

Ich hatte ein ähnliches Problem (mit IRKernel/rzmq), aber die Deinstallation eines Neuinstallationspakets hat nicht geholfen; siehe: https://github.com/IRkernel/IRkernel/issues/237. –

+0

@CephBirk was ist mit Paketen, die nicht von CRAN installiert wurden :)? dann 'install.packages' retriviert sie nicht –

1

Das ist keine Antwort auf diese Frage, aber es könnte für jemanden nützlich sein. Ich hatte segfaults, als ich pdf erstellte, um ein PDF-Grafikgerät zu erstellen, und dann plot verwendet. Dies geschah mit R 2.15.3, 3.2.4 und einer oder zwei anderen Versionen, die auf Scientific Linux Release 6.7 laufen. Ich habe viele verschiedene Dinge ausprobiert, aber die einzige Möglichkeit, es zum Laufen zu bringen, war (0) png oder anstelle von pdf, oder (b) große Dateien .RData zu speichern und dann ein komplett separates R-Programm zu verwenden, um die Grafiken zu erstellen.

+0

Ich habe das gleiche Problem und das ist die gleiche Problemumgehung, die ich verwende. Lassen Sie es mich wissen, wenn Sie eine Lösung oder einen Grund dafür finden konnten. –

+0

Das ist interessant. Ich habe nur Segfaults erhalten, wenn ein sehr großes Objekt im Speicher war (dieses Objekt wurde nicht im Befehl 'plot' verwendet). Ist es das gleiche für dich? Eine andere Idee, die ich hatte, war, das große Objekt auf der Festplatte zu speichern und es aus dem Speicher zu entfernen, entweder vor dem Ausführen von 'pdf' oder zwischen' pdf' und 'plot', und danach neu laden. Aber ich habe das noch nicht ausprobiert, da es etwas Umschreiben erforderte. – user1310503

+0

In meinem Fall hatte ich keine großen Objekte. Ich habe explizit ein "gc()" ausgeführt, um die Speicherbereinigung zu erzwingen, und habe den freien Speicher kurz vor dem Ausführen eines Befehls "plot (1:10)" überprüft. Es hatte zu diesem Zeitpunkt mehr als 20 GB freien RAM. –

2

Dies ist keine Antwort auf diese Frage, aber es könnte für jemanden hilfreich sein. (Inspiriert von user1310503. Danke!)

Ich arbeite an einem data.frame df mit drei Spalten: col1, col2, col3. Zunächst ,

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

Im Prozess rbind für viele Male verwendet wird, wie:

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

Endlich df geschrieben wird über data.table :: Fwrite

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

df hat 5973 Zeilen und 3 Spalten.Der "gefangen segfault" tritt immer dann auf:

address 0x1, cause 'memory not mapped'.  

Die Lösung für dieses Problem ist:

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) 

Dann ist dieses Problem gelöst ist. Möglicher Grund ist, dass die Klassen von Spalten unterschiedlich sind.

+0

Genau das habe ich gesucht. Ich hatte nicht sichergestellt, dass meine Spalten vor rbind() in der gleichen Reihenfolge erschienen. Ordnen Sie Spalten wie in https://stackoverflow.com/a/7496246/5021307 vor rbind() neu an, um dieses Problem zu beheben. –