Pergunta

Eu preciso modificar o lm (ou eventualmente loess) função para que eu possa usá -lo no GGPLOT2 geom_smooth (ou stat_smooth).

Por exemplo, é assim que stat_smooth é usado normalmente:

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

Eu gostaria de definir um costume lm2 função para usar como valor para o method parâmetro em stat_smooth, para que eu possa personalizar seu comportamento.

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

Observe que eu usei method='lm2' como parâmetro em stat_smooth. Quando eu executo este código A GET O ERRO:

Erro em Eval (Expr, Envir, Enclos): 'NTHCDR' precisa de uma lista para CDR Down

O que eu não entendo muito bem. o lm2 o método funciona muito bem quando executado fora de stat_smooth. Eu brinquei um pouco com isso e tenho diferentes tipos de erro, mas como não me sinto confortável com as ferramentas de depuração do R, é difícil para mim depurar. Honestamente, eu não entendo o que devo colocar dentro do return() ligar.

Foi útil?

Solução

Há alguma estranheza em usar ... como um argumento em uma chamada de função que eu não entendo completamente (tem algo a ver com ... ser um objeto do tipo lista).

Aqui está uma versão que funciona atendendo a chamada de função como um objeto, definindo a função a ser chamada para LM e avaliando a chamada no contexto de nosso próprio chamador. O resultado dessa avaliação é o nosso valor de retorno (em r o valor da última expressão em uma função é o valor retornado, por isso não precisamos de um explícito return).

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

Se você quiser adicionar argumentos à chamada LM, pode fazer assim:

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

Se você quiser soltar argumentos para foo antes de ligar para LM, você pode fazer isso assim

x$useless <- NULL

A propósito, geom_smooth e stat_smooth Passe quaisquer argumentos extras para a função de suavização, para que você não precise criar uma função própria se precisar definir alguns argumentos extras

qplot(data=diamonds, carat, price, facets=~clarity) + 
  stat_smooth(method="loess",span=0.5)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top