修改LM或黄土功能GGPLOT2的geom_smooth内使用
题
我需要修改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
参数。
当我执行此代码得到错误:
在错误的eval(expr中,ENVIR,enclos): 'nthcdr' 需要一个列表,以CDR向下
我不很了解。该lm2
方法工作时运行stat_smooth
之外的非常好。我打这个有点和我有不同类型的错误,但因为我不舒服有R的调试工具,它是我很难对其进行调试。老实说,我没有得到什么,我应该把return()
调用中。
解决方案
有是在使用一些古怪......作为函数调用的参数,我不完全理解(它是与...是一个列表类型的对象)。
下面是通过采取函数调用为对象,设置函数被调用来流明,然后评估该呼叫在我们自己的呼叫者的情况下工作的版本。本次评测的结果是我们的返回值(在读的功能,最后一个表达式的值返回的值,所以我们并不需要一个明确的return
)。
foo <- function(formula,data,...){
print(head(data))
x<-match.call()
x[[1]]<-quote(lm)
eval.parent(x)
}
如果你想参数添加到LM电话,你可以做这样的:
x$na.action <- 'na.exclude'
如果你愿意,你打电话之前LM下降参数为foo,你可以做这样的
x$useless <- NULL
顺便说一句,geom_smooth
和stat_smooth
传递任何额外的参数,以平滑功能,所以你不必创建自己的功能,如果你只需要设置一些额外的参数
qplot(data=diamonds, carat, price, facets=~clarity) +
stat_smooth(method="loess",span=0.5)
不隶属于 StackOverflow