R имеет удобный инструмент для манипулирования формулами, update.formula()
. Это хорошо работает, если вы хотите получить что-то вроде "формулы, содержащей все термины в предыдущей формуле, кроме x
", например.
f1 <- z ~ a + b + c
(f2 <- update.formula(f1, . ~ . - c))
## z ~ a + b
Однако, похоже, это не работает со смещением:
f3 <- z ~ a + offset(b)
update(f3, . ~ . - offset(b))
## z ~ a + offset(b)
Я откопал до terms.formula
, который ?update.formula
ссылается:
[после подстановки,...] Результат затем упрощается через "terms.formula(simplify = TRUE).
terms.formula(z ~ a + offset(b) - offset(b), simplify=TRUE)
## z ~ a + offset(b)
(т.е. это, кажется, не удаляет offset(b)
...)
Я знаю, что могу взломать решение, используя deparse()
и текстовую обработку, или обработкой формулы рекурсивно, чтобы удалить термин, который я не хочу, но эти решения являются уродливыми и/или раздражающими для реализации. Либо просвещение о том, почему это не работает, либо разумно компактное решение, было бы здорово...