измените lm или функцию лесса для использования его в geom_smooth ggplot2

Я должен изменить lm (или в конечном счете loess) функционируйте, таким образом, я могу использовать его в ggplot2 geom_smooth (или stat_smooth).

Например, это то, как stat_smooth обычно используется:

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

Я хотел бы определить пользовательское lm2 функционируйте для использования в качестве значения для method параметр в stat_smooth, таким образом, я могу настроить его поведение.

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

Обратите внимание, что я использовал method='lm2' как параметр в stat_smooth. Когда я выполняю этот код получение ошибки:

Ошибка в оценке (expr, envir, enclos): 'nthcdr' нужен список к CDR вниз

Который я не понимаю очень хорошо. lm2 метод работает очень хорошо, когда выполнено за пределами stat_smooth. Я играл с этим немного, и у меня есть различные типы ошибки, но так как я не доволен отладчиками R, для меня трудно отладить их. Честно, я не получаю то, что я должен вставить return() звонить.

9
задан Richard Erickson 11 April 2016 в 20:48
поделиться

1 ответ

Есть некоторая странность в использовании ... в качестве аргумента в вызове функции, который я не совсем понимаю (это как-то связано с .. .является объектом типа списка).

Вот версия, которая работает, принимая вызов функции как объект, устанавливая функцию для вызова на lm и затем оценивая вызов в контексте нашего собственного вызывающего. Результатом этой оценки является наше возвращаемое значение (в R значение последнего выражения в функции - это возвращаемое значение, поэтому нам не нужен явный return ).

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

Если вы хотите добавить аргументы к вызову lm, вы можете сделать это следующим образом:

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

Если вы хотите отбросить аргументы в foo перед вызовом lm, вы можете сделать это следующим образом

x$useless <- NULL

Между прочим, geom_smooth и stat_smooth передают любые дополнительные аргументы функции сглаживания, поэтому вам не нужно создавать собственную функцию, если вам нужно установить только некоторые дополнительные аргументы

qplot(data=diamonds, carat, price, facets=~clarity) + 
  stat_smooth(method="loess",span=0.5)
6
ответ дан 4 December 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: