R ksmooth函数没有';不要通过省略号处理参数

R ksmooth函数没有';不要通过省略号处理参数,r,R,我目前在大学里学习R课程,所以我还没有经验。 我们使用R进行探索性数据分析。在数据分析中,我们应该对数据应用不同的回归模型,并为每个模型生成相同的图。此外,为了便于学习,我们应该对参数进行一些调整。为了避免10-20次不吸引人的复制粘贴,我编写了一个函数,用省略号(…)显示回归函数及其参数。在这个函数中,我使用省略号作为参数调用传递的函数 library("astsa") data_glob <- globtemp plot.data.and.reg <-

我目前在大学里学习R课程,所以我还没有经验。 我们使用R进行探索性数据分析。在数据分析中,我们应该对数据应用不同的回归模型,并为每个模型生成相同的图。此外,为了便于学习,我们应该对参数进行一些调整。为了避免10-20次不吸引人的复制粘贴,我编写了一个函数,用省略号(
)显示回归函数及其参数。在这个函数中,我使用省略号作为参数调用传递的函数

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
)