【发布时间】:2012-01-20 18:43:58
【问题描述】:
这是我想做的一个非常精简的版本,我无法粘贴我的确切问题,因为代码太长太复杂,但我认为这是问题的根源。感谢 Josh 对这个问题的回答 How do you code an R function so that it 'knows' to look in 'data' for the variables in other arguments? 我已经成功了。
example <- function(model, xvar3=NULL, xvar4=NULL, data){
print(class(model))
#xvar3 <- eval(substitute(xvar3), envir=data, enclos=parent.frame())
#xvar4 <- eval(substitute(xvar4), envir=data, enclos=parent.frame())
print(class(xvar3))
xvar5 <- xvar4^2
mod <- glm( model + xvar3 + xvar5, data=data)
return(mod)
}
example(mpg ~ cyl, hp, wt, data=mtcars)
这失败了。如果您删除 cmets(基于上一个问题的帮助),它可以解决“查找”hp 和 wt 的问题。 'model' 是类公式,我希望它变成 'mpg ~ cyl + xvar3 + xvar5' 以便 glm 运行。但我似乎无法将它们添加到公式中。
我一直在玩弄“call”类,进一步玩弄“eval”和“as.formula”以及“paste”和“noquote”等的变体,但看不到让它坚持下去。
【问题讨论】:
-
你可以在开始的 glm 上使用
update.... -
感谢 Hong,最初的尝试表明在其中打印“单词”xvar3(因为缺少正确的术语)而不是打印实际的数据向量存在同样的问题。这可能读起来很糟糕。
-
重点是你想给模型添加更多的项。这就是
update的用途。看起来你基本上是在重新发明轮子。 -
随意提出一个答案,说明更新在这种情况下如何工作,我无法让它适用于这个特定的设置。如果我正在寻找,我会重新发明轮子一个“新的”更新命令,我不是。我正在寻找一种方法来运行一次模型,并以所描述的方式添加“术语”。在我的实际问题中,这是在一个循环内,并且添加的变量不只 2 个(这只是一个简化的可重现示例),因此运行一个模型一次,然后多次更新,在一个循环内运行多次将是一个非常我的实际问题的低效方法。
-
@HongOoi - 关于
update的要点。尽管如此,环境仍然需要做一些工作才能使其在这种情况下工作。看我的回答。