измените функцию lm или loess, чтобы использовать ее в geom_smooth ggplot2
Вопрос
Мне нужно изменить функцию lm
(или, в конечном итоге, loess
), чтобы я мог использовать ее в geom_smooth
(или stat_smooth
) ggplot2.
Например, вот как обычно используется stat_smooth
:
Я хотел бы определить настраиваемую функцию lm2
для использования в качестве значения параметра method
в stat_smooth
, чтобы я мог настроить ее поведение.
Обратите внимание, что я использовал method='lm2'
в качестве параметра в stat_smooth
.
Когда я выполняю этот код, я получаю сообщение об ошибке:
Ошибка в eval (expr, envir, enclos): 'nthcdr' нужен список для CDR вниз
Что я не очень хорошо понимаю. Метод lm2
очень хорошо работает, когда выполняется вне кода stat_smooth
. Я немного поигрался с этим, и у меня были разные типы ошибок, но, поскольку мне не нравятся инструменты отладки R, мне трудно их отлаживать. Честно говоря, я не понимаю, что нужно вставить в вызов return()
.
Решение
Есть некоторая странность в использовании ... в качестве аргумента в вызове функции, которую я не совсем понимаю (это как-то связано с ... тем, что это объект типа списка).
Вот версия, которая работает, принимая вызов функции как объект, устанавливая функцию для вызова на lm и затем оценивая вызов в контексте нашего собственного вызывающего.Результатом этой оценки является наше возвращаемое значение (в R значение последнего выражения в функции - это возвращаемое значение, поэтому нам не нужен явный код генерирования кода).
родовое словоЕсли вы хотите добавить аргументы к вызову lm, вы можете сделать это следующим образом:
родовое словоЕсли вы хотите передать аргументы в foo перед вызовом lm, вы можете сделать это следующим образом
родовое слово Кстати, return
и geom_smooth
передают любые дополнительные аргументы функции сглаживания, поэтому вам не нужно создавать собственную функцию, если вам нужно только установить некоторые дополнительные аргументы