1
我有一个模型构建函数,它使用公式来定义模型。除了公式类型为y ~ x
的通常回归情况外,我还想添加例如趋势分量作为解释变量的可能性,该变量将在函数内部定义。下面是一个例子:类型y〜x +趋势或y〜x +“趋势”的R公式,其中趋势/“趋势”用作指标?
modelx <- function(formula, data,...) {
mf <- mc <- match.call()
mf <- mf[c(1L, match(c("formula", "data"), names(mf), 0L))]
formula_vars <- all.vars(formula)
if ("trend" %in% formula_vars) {
trend <- TRUE
formula <- update.formula(formula, ~. - trend)
} else trend <- FALSE
mf[[2L]] <- formula
mf[[1L]] <- as.name("model.frame")
mf$na.action <- as.name("na.pass")
mf <- eval(mf, parent.frame())
y <- model.response(mf, "numeric")
mt <- attr(mf, "terms")
X <- model.matrix(mt, mf)
# y, X and possible trend component etc. are combined into the model object
if(trend)
X<-cbind(X,1:length(y)) #just an example
list(y=y,X=X)
}
这里的想法是,公式是y ~ x + trend
类型和功能来检查是否一个称为trend
变量是在该式中,删除它并接通标志trend
成TRUE
,其将在以后使用以便为该模型构建适当的趋势组件。
我想知道是否有更好的方法来完成此?这种方法的一个小问题是,用户想要使用的名称趋势可能会变化,并且会与模型的趋势分量混合在一起,另一个问题是,例如,此类功能不起作用,因为变量trend
不存在:
combn(c(trend,x1,x2),m=2,modelx,y=y)
如果,而不是trend
我用字符串"trend"
,问题是all.vars(formula)
不捕获字符串。
任何建议如何处理这种类型的公式,或任何指向某些函数的指针,这些函数的公式包含这种类型的可能性?
解决我缺少的东西?看起来最明显的做法是给你的'modelx'函数一个'trend'参数,它将被赋予'TRUE'或'FALSE'值,那么你不需要用公式来解决。 – Marius 2013-03-04 10:23:18
的确,我的例子太简单了。在我的真实应用程序中,我有几种这类指标,所以我觉得将模型定义为'xmodel(y〜x + ind1 + ind2 + ind3)'而不是'xmodel(y〜x, IND1 = IND1,IND2 = IND2,IND3 = IND3)'。 – 2013-03-04 10:31:46
我可以看到这一点,但你正在为自己做很多辛苦的工作,只有这样你才能实现将参数填入公式规范的可疑目标。参数(因为这就是它们)被从公式规范中提取出来并几乎立即转换回参数/标志。 – Marius 2013-03-04 10:36:10