我需要修改lm(或最终loess)函数,所以我可以在GGPLOT2的geom_smooth(或stat_smooth)使用它。

例如,这是多么stat_smooth通常使用:

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

我想定义定制lm2功能值以用于在methodstat_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_smoothstat_smooth传递任何额外的参数,以平滑功能,所以你不必创建自己的功能,如果你只需要设置一些额外的参数

qplot(data=diamonds, carat, price, facets=~clarity) + 
  stat_smooth(method="loess",span=0.5)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top