我有一个R公式对象:
formula1 <- y ~ x1 + x2 + x3 + x1:x2
我想通过删除所有与x1相关的变量来更新此公式对象。那是x1 AND x1:x2。
如果我使用更新功能,
update(formula1,.~.-x1)
我明白了:
y ~ x2 + x3 + x1:x2
这不是我想要的。在实践中,我不知道在formula1对象中定义了多少x1的交互效果。
有没有简单的方法来获取
y ~ x2 + x3
答案 0 :(得分:2)
这是一个删除术语的功能,包括术语存在的所有交互:
remove_terms <- function(form, term) {
fterms <- terms(form)
fac <- attr(fterms, "factors")
idx <- which(as.logical(fac[term, ]))
new_fterms <- drop.terms(fterms, dropx = idx, keep.response = TRUE)
return(formula(new_fterms))
}
应用功能:
formula1 <- y ~ x1 + x2 + x3 + x1:x2
# the term that should be removed
to_remove <- "x1"
remove_terms(formula1, to_remove)
# y ~ x2 + x3