我有一个公式:
my_formula <- a ~ b + (1|d) + e
我想以编程方式从此公式中删除e
变量。
我对固定效果公式所做的是:
drop_es <- function(f) {
e_idxs <- grep(pattern = 'e',
x = all.vars(f[[3]]))
stats::formula(stats::drop.terms(termobj = stats::terms(f),
dropx = e_idxs,
keep.response = TRUE))
}
这适用于仅限固定效果的公式:
drop_es(f = a ~ b + e)
a~b
但是对于具有随机效果的公式,它会删除括号:
drop_es(f = a ~ b + (1|d) + e)
a~b + 1 | d
这是一个非常重要的区别 - 没有括号,它被解释为:
a ~ b|d
如何在不丢失括号的情况下删除e
条款?
答案 0 :(得分:3)
存在update
函数来修改公式。使用
update(my_formula, ~.-e)
# a ~ b + (1 | d)
-e
意味着放弃&#34; e&#34;来自公式的术语,.
表示保留其他所有内容。