R更新函数,如何删除与预先指定的变量相关的所有变量

时间:2014-04-30 06:59:00

标签: r statistics formula

我有一个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

1 个答案:

答案 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