【发布时间】:2021-04-13 09:27:54
【问题描述】:
我在mgcv::gam() 周围写了一个包装函数来直接将模型写入磁盘并做一些更方便的事情。到目前为止,一切都很好,每一个论点都被传递并且有效。除了,当我添加要传递给mgcv::gam(offset = ) 的偏移量参数时。下面是一些示例代码。
require(mgcv)
gam1 = function(form,
data,
family,
knots = NULL) {
gam(formula = form,
knots = knots,
data = data,
family = family)
}
gam1(Sepal.Length ~ s(Sepal.Width),
data = iris,
family = 'gaussian')
参数被传递给gam()(例如节、家庭)。作品。但是,如果我将 offset_ 添加到聚会中,它不会传递,而是会引发错误:
gam2 = function(form,
data,
family,
knots = NULL,
offset_ = NULL) {
gam(formula = form,
data = data,
family = family,
offset = offset_)
}
gam2(Sepal.Length ~ s(Sepal.Width),
data = iris,
family = 'gaussian',
offset_ = NULL)
offset_ 未传递并抛出此错误:
Error in eval(extras, data, env) : object 'offset_' not found。如果我改用offset,它会抛出这个错误:invalid type (closure) for variable '(offset)'。
问:为什么我的包装器无法传递offset_?我怎样才能让它运行?
错误发生在下面源代码sn-p的最后一行。但是我不太明白为什么。
mf$drop.unused.levels <- drop.unused.levels
mf[[1]] <- quote(stats::model.frame) ## as.name("model.frame")
pmf <- mf
mf <- eval(mf, parent.frame()) # the model frame now contains all the data
【问题讨论】: