2011-01-17 5 views
1

Update ich meine Lösung unten gebucht haben, war der Täter meine eigene rename Funktion, die reshape::renameggplot „Fehler in Umbenennungs“


overrode ich die ggplot R-Paket mit wenig Mühe bis heute verwendet haben. Heute bekomme ich einen Fehler mit Code, der vorher funktioniert hat, und wenn ich ihn auf das minimale Arbeitsbeispiel debugge, gibt es immer noch einen Fehler;

Wenn ich dies tun:

library(ggplot2) 
d<- data.frame(x=1:3,y=1:3) 
ggplot(data=d) + geom_line(aes(x,y)) 

Der folgende Fehler zurückgegeben:

Error in rename(x, .base_to_ggplot) : 
    unused argument(s) (.base_to_ggplot) 

Die Zurückverfolgungs ist:

6: rename(x, .base_to_ggplot) 
5: rename_aes(aes) 
4: aes() 
3: structure(list(data = data, layers = list(), scales = Scales$new(), 
     mapping = mapping, options = list(), coordinates = CoordCartesian$new(), 
     facet = FacetGrid$new(), plot_env = environment), class = "ggplot") 
2: ggplot.data.frame(data = d, aes = c(x, y)) 
1: ggplot(data = d, aes = c(x, y)) 

Der Fehler tritt nicht auf, nachdem alle Objekte zu entfernen unter Verwendung von rm(list=ls()), aber mir ist immer noch nicht klar, welches Objekt diesen Fehler verursacht oder warum - wie kann ich das herausfinden?

Wer weiß, was falsch gegangen sein?

Antwort

1

Das Problem verursacht, weil ggplot2 Namespaces nicht verwendet - dies wird in der nächsten Version behoben werden.

+0

danke für die klärung - und daran arbeiten. –

2

Ich bin nicht in der Lage die gleiche Fehlermeldung zurück, die Sie oben gepostet haben. Wenn Ihr Code-Snippet ausgeführt wird, erhalte ich folgende Fehlermeldung:

Error: geom_pointrange requires the following missing aesthetics: ymin, ymax 

Dementsprechend geom_pointrange() erwartet Argumente für ymin und ymax. Ich werde es Ihnen überlassen bis in Ihre relevanten Informationen zu füllen, was in diesen Parametern gehen sollte, aber dieser Code ausführt:

ggplot(data=d) + geom_pointrange(aes(x,y, ymin = y - .5, ymax = y + .5))

+0

sorry dafür. Ich habe das Beispiel schnell geschrieben, anstatt es von meinem Terminal zu kopieren. Ich bekomme den Fehler mit geom_line, und ich habe den Beispielcode geändert. –

+0

@David - Doh! Entschuldigen Sie. Ich bin jedoch in der Lage, den aktualisierten Code auch korrekt auszuführen. Klingt wie etwas in deiner Umgebung, das Probleme verursacht ... und ich bin wahrscheinlich nicht der beste, um in dieser Arena zu helfen.Können Sie das Problem reproduzieren, wenn Sie eine neue Instanz von R mit einer leeren Umgebung starten? – Chase

+0

nein, ich kann den Fehler nicht reproduzieren ... und ich kann es nicht durch 'rm (list = ls())' reproduzieren. Zumindest habe ich etwas zum Debuggen. –

1

Der Fehler, der durch eines der Objekte (dank Zeiger verursacht wurde aus @Verfolgungsjagd).

Hier ist, wie ich gedebuggt und die Schuldigen gefunden. Der wichtige Teil war die try() Funktion zu verwenden, die

foo <- ls() #get a static list of all suspect objects 
for(i in 1:length(foo)) { 
    print(foo[i]) 
    rm(list=foo[i]) 
    try(ggplot()+geom_point(aes(x=1:2,y=1:2))) 
} 

Dies führte in der folgenden Ausgabe trotz Fehlern die for-Schleife am Laufen hält:

... 
[1] "45 reg.model" 
Error in rename(x, .base_to_ggplot) : 
    unused argument(s) (.base_to_ggplot) 
[1] "46 reg.parms" 
Error in rename(x, .base_to_ggplot) : 
    unused argument(s) (.base_to_ggplot) 
[1] "47 rename" 
[1] "48 samples" 
... 

aha! es war meine eigene Funktion rename, die den Fehler verursachte, da ggplot2 auf reshape::rename beruht.

Lösung: Benennen Sie die neue Funktion rename ... wie dies in Zukunft zu verhindern? Vielleicht über die Verwendung von Namespaces lernen.

+0

Ich mag Ihre Verwendung von 'ls()' für das Debugging, hätte ich nicht darüber nachgedacht. Schön, dass es geklappt hat! – Chase