Pregunta

tengo que modificar el lm (o eventualmente loess) la función para que pueda utilizarlo en geom_smooth de ggplot2 (o stat_smooth).

Por ejemplo, esto es cómo se utiliza normalmente stat_smooth:

> qplot(data=diamonds, carat, price, facets=~clarity) + stat_smooth(method='lm')`

Me gustaría definir una función lm2 personalizada para utilizar como valor para el parámetro method en stat_smooth, para que pueda personalizar su comportamiento.

> lm2 <- function(formula, data, ...)
  {
      print(head(data))
      return(lm(formula, data, ...))
  }
> qplot(data=diamonds, carat, price, facets=~clarity) + stat_smooth(method='lm2')

Tenga en cuenta que he utilizado como parámetro en method='lm2' stat_smooth. Cuando ejecuto el código de un sale el error:

  

Error en eval (expr, envir, enclos): '' nthcdr necesita una lista de CDR abajo

Lo que no entiendo muy bien. El método lm2 funciona muy bien cuando se ejecuta fuera del stat_smooth. He jugado con esto un poco y tengo diferentes tipos de error, pero ya que no estoy cómodo con herramientas de depuración de R es difícil para mí a depurarlos. Sinceramente, no entiendo lo que debería poner dentro de la llamada return().

¿Fue útil?

Solución

Hay una cierta rareza en el uso ... como un argumento en una llamada a una función que no entiendo totalmente (que tiene algo que ver con ... siendo un objeto de tipo lista).

Aquí está una versión que funciona mediante la adopción de la llamada de función como un objeto, el establecimiento de la función de ser llamado a lm y luego evaluar la llamada en el contexto de nuestra propia persona que llama. El resultado de esta evaluación es nuestro valor de retorno (en I el valor de la última expresión de una función es el valor devuelto, por lo que no necesitamos un return explícita).

foo <- function(formula,data,...){
   print(head(data))
   x<-match.call()
   x[[1]]<-quote(lm)
   eval.parent(x)
}

Si desea agregar argumentos para la llamada LM, puede hacerlo de esta manera:

x$na.action <- 'na.exclude'

Si desea colocar argumentos a foo antes de llamar lm, puede hacerlo de esta manera

x$useless <- NULL

Por cierto, geom_smooth y stat_smooth pasar argumentos adicionales a la función de suavizado, por lo que no es necesario crear una función de su propia si sólo se necesita establecer algunos argumentos adicionales

qplot(data=diamonds, carat, price, facets=~clarity) + 
  stat_smooth(method="loess",span=0.5)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top