gpt4 book ai didi

r - 修改 lm 或 loess 函数以在 ggplot2 的 geom_smooth 中使用它

转载 作者:行者123 更新时间:2023-12-04 04:19:43 28 4
gpt4 key购买 nike

我需要修改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 中的参数.
当我执行此代码时,出现错误:

Error in eval(expr, envir, enclos) : 'nthcdr' needs a list to CDR down



我不太明白。 lm2方法在 stat_smooth 之外运行时效果很好.我玩了一会儿,我遇到了不同类型的错误,但是由于我对 R 的调试工具不满意,所以我很难调试它们。老实说,我不明白应该在 return() 里面放什么称呼。

最佳答案

在我不完全理解的函数调用中使用 ... 作为参数有一些奇怪(它与 ... 作为列表类型对象有关)。

这是一个版本,它通过将函数调用作为一个对象,将要调用的函数设置为 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'

如果你想在调用 lm 之前删除 foo 的参数,你可以这样做
x$useless <- NULL

顺便说一句, geom_smoothstat_smooth将任何额外的参数传递给平滑函数,因此如果您只需要设置一些额外的参数,则无需创建自己的函数
qplot(data=diamonds, carat, price, facets=~clarity) + 
stat_smooth(method="loess",span=0.5)

关于r - 修改 lm 或 loess 函数以在 ggplot2 的 geom_smooth 中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2370648/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com