ändern lm oder Löss-Funktion zu verwenden, um es ggplot2 des geom_smooth innerhalb

StackOverflow https://stackoverflow.com/questions/2370648

  •  24-09-2019
  •  | 
  •  

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.

War es hilfreich?

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top