R ksmooth函数没有';不要通过省略号处理参数
我目前在大学里学习R课程,所以我还没有经验。 我们使用R进行探索性数据分析。在数据分析中,我们应该对数据应用不同的回归模型,并为每个模型生成相同的图。此外,为了便于学习,我们应该对参数进行一些调整。为了避免10-20次不吸引人的复制粘贴,我编写了一个函数,用省略号(R ksmooth函数没有';不要通过省略号处理参数,r,R,我目前在大学里学习R课程,所以我还没有经验。 我们使用R进行探索性数据分析。在数据分析中,我们应该对数据应用不同的回归模型,并为每个模型生成相同的图。此外,为了便于学习,我们应该对参数进行一些调整。为了避免10-20次不吸引人的复制粘贴,我编写了一个函数,用省略号(…)显示回归函数及其参数。在这个函数中,我使用省略号作为参数调用传递的函数 library("astsa") data_glob <- globtemp plot.data.and.reg <-
…
)显示回归函数及其参数。在这个函数中,我使用省略号作为参数调用传递的函数
library("astsa")
data_glob <- globtemp
plot.data.and.reg <- function(data, reg.func, ...){
model <- reg.func(...)
par(mfrow = c(1, 2))
plot(data)
abline(model, col = "orange", lwd = 3)
qqnorm(data)
}
于是我看了看那张照片。它表明出现此错误消息是因为检查“缺失(y)”失败。显然出现了一个问题,因为我将参数作为省略号传递,而它似乎没有“解包”。
为了简单起见,我编写了一个虚拟函数来测试我是否可以自己添加这个“解包”
test.wrapperPython中与*
/**
splat最接近的等价物是do.call
函数
但是,这里不需要这个。实际的问题是,您将额外的参数作为列表传递,而不是单独传递。展平列表后,它将工作1:
实际上,我很惊讶它能与lm
的列表一起工作;这不是故意的,它本质上是由lm
当前的实现方式造成的事故
1我之所以说它“有效”,是因为没有错误,并且它绘制了一些东西,但是对于您的示例数据,没有可见的回归线(abline
不适用于ksmooth
的输出),平滑参数没有任何作用-结果与非平滑输入相同
要使其正常工作,请使用行
而不是行
。至于平滑,对于您的示例数据,带宽为10很好。顺便说一下,as.formula(“…”
)是多余的。只需编写data\u glob~time(data\u glob)
,它的作用完全相同。还有一条评论,因为您提到您是R新手:我建议不要在标识符中使用
。它是有效的,但它可能会导致S3方法查找的歧义。一个普遍的惯例是使用下划线,例如plot\u data\u和\u reg
。您好,康拉德,非常感谢您的帮助。根据您的建议,现在一切都正常了,我只需添加try(line(…)和try(abline(…)),以便两种形式的模型都能正确绘制。还感谢您提供有关函数名的提示。在这里,我可能有一个完全错误的习惯,不是从Python中采用的D
plot.data.and.reg(
data_g,
lm,
list(
formula = as.formula("data_glob ~ time(data_glob)"),
data = data_glob
)
)
plot.data.and.reg(
data_glob,
ksmooth,
list(
x = as.numeric(time(data_glob)),
y = as.numeric(data_glob),
kernel = "box",
bandwidth = 0.25
)
)
test.wrapper <- function(func, ...){
func(...)
}
test <- function(x, y){
match.call()
if(missing(y))
print("Leider hatte ich Recht")
print(x)
print(y)
}
test.wrapper(test, list(x = 10, y = 20))
plot.data.and.reg(
data_glob,
ksmooth,
x = as.numeric(time(data_glob)),
y = as.numeric(data_glob),
kernel = "box",
bandwidth = 0.25
)