ändern lm oder Löss-Funktion zu verwenden, um es ggplot2 des geom_smooth innerhalb
Frage
Ich brauche die lm
(oder eventuell loess
) zu modifizieren, damit ich es in ggplot2 den geom_smooth
verwenden kann (oder stat_smooth
).
Zum Beispiel ist dies, wie stat_smooth
wird normalerweise verwendet:
> qplot(data=diamonds, carat, price, facets=~clarity) + stat_smooth(method='lm')`
Ich mag eine benutzerdefinierte lm2
Funktion definieren als Wert für den Parameter method
in stat_smooth
zu verwenden, so dass ich sein Verhalten anpassen kann.
> lm2 <- function(formula, data, ...)
{
print(head(data))
return(lm(formula, data, ...))
}
> qplot(data=diamonds, carat, price, facets=~clarity) + stat_smooth(method='lm2')
Beachten Sie, dass ich method='lm2'
als Parameter in stat_smooth
verwendet haben.
Wenn ich diesen Code ausführen erhalten ein die Fehler:
Fehler in eval (ausdr, envir, enclos): 'nthcdr' muss eine Liste CDR nach unten
Was ich nicht sehr gut verstehen. Die lm2
Methode funktioniert sehr gut, wenn sie außerhalb von stat_smooth
laufen. Ich spielte mit dieser ein wenig, und ich habe verschiedene Arten von Fehlermeldung anzeigt, aber da ich mit R Debug-Tools nicht bequem bin es ist schwierig für mich, sie zu debuggen. Ehrlich gesagt, ich weiß nicht, was ich soll in dem return()
Anruf setzen.
Lösung
Es gibt einige Seltsamkeit sich mit der ... als Argument in einem Funktionsaufruf, dass ich nicht vollständig verstehen (es hat etwas mit ... ist eine Liste-Art-Objekt zu tun).
Hier ist eine Version, die, indem sie den Funktionsaufruf als Objekt arbeitet, die Funktion Einstellung lm aufgerufen werden und dann im Rahmen unserer eigenen Anrufer den Anruf zu bewerten. Das Ergebnis dieser Auswertung ist unser Rückgabewert (in R der Wert des letzten Ausdrucks in Abhängigkeit der zurückgegebene Wert ist, so dass wir eine explizite return
nicht brauchen).
foo <- function(formula,data,...){
print(head(data))
x<-match.call()
x[[1]]<-quote(lm)
eval.parent(x)
}
Wenn Sie Argumente für den Film Anruf hinzufügen möchten, können Sie es wie folgt tun:
x$na.action <- 'na.exclude'
Wenn Sie Argumente foo löschen, bevor Sie lm aufrufen, können Sie es wie folgt tun
x$useless <- NULL
Durch die Art und Weise, geom_smooth
und stat_smooth
passieren keine zusätzlichen Argumente an die Glättungsfunktion, so dass Sie brauchen nicht eine Funktion des eigenen erstellen, wenn Sie nur ein paar zusätzliche Argumente müssen auf
qplot(data=diamonds, carat, price, facets=~clarity) +
stat_smooth(method="loess",span=0.5)