我正在编写一个函数,该函数接受两个变量,并在一组控件上单独回归它们,表示为单侧公式。现在我正在使用以下内容制作其中一个回归的公式,但感觉有点黑客攻击:
foo <- function(x, y, controls) {
cl <- match.call()
xn <- cl[["x"]]
xf <- as.formula(paste(xn, deparse(controls)))
}
我希望使用update.formula()
执行此操作,但当然update.formula(controls, x ~ .)
和update.formula(controls, as.name(x) ~ .)
不起作用。我该怎么办?
答案 0 :(得分:5)
这是一种方法:
right <- ~ a + b + c
left <- ~ y
left_2 <- substitute(left ~ ., list(left = left[[2]]))
update(right, left_2)
但我认为您必须将文本字符串粘贴在一起,或者使用替换字符串。据我所知,没有函数可以从两个单边公式(或类似的等价公式)创建一个双边公式。
答案 1 :(得分:1)
我不确定update.formula()
,但我使用了您在此处粘贴文本并在过去通过as.formula
转换成功的方法。我对help(update.formula)
的阅读并没有让我觉得你可以按照自己的意愿替代左手边。
最后,相信调度机制。如果您的对象属于公式类型,则只需调用update
,而不是显式update.formula
。