【发布时间】:2021-01-27 19:58:19
【问题描述】:
由于大学的课程,我目前正在使用 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)
}
这适用于简单的 lm 函数,但不幸的是不适用于 ksmooth 函数。 当我通过此函数时,我收到错误消息:“必须提供数字 y。对于密度估计,请使用密度()”。
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
)
)
于是我查看了source code of ksmooth。它表明出现此错误消息是因为检查“missing(y)”失败。显然出现了一个问题,因为我将参数作为省略号传递并且它似乎没有“解包”。
为简单起见,我编写了一个虚拟函数来测试我是否可以自己添加这个“解包”。
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))
很遗憾,我还没有找到解决方案。
我从 Python 知道这一点,因此与 kwargs 一样,可以使用 ** 运算符解压缩字典。 R中是否有等价物?或者如何确保在 R 中正确使用省略号中的参数?
由于它可以与 lm 函数一起使用而没有错误,因此我还再次查看了 their source code 。不幸的是,以我在 R 方面的一点经验,我无法确切地看出本质区别在哪里。
总的来说,我将错误归因于 ksmooth 函数尚未设计用于省略号的事实,但我不确定。我需要如何调整ksmooth 代码以使其与... 一起使用?
(对于我的Uni任务,如果有疑问,我将求助于复制粘贴(反)模式。经过这么长时间的搜索,我仍然对解决方案感兴趣,并且将来可能会有用)。
非常感谢您的帮助!
标签: r