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()
和文本處理砍了一個解決方案,或處理的公式遞歸地刪除術語我不想要的,但這些解決方案是醜陋的和/或惱人的實現。要麼啓示爲爲什麼這不起作用,或合理緊湊的解決方案,將是偉大的...
多一點挖'terms.formula'表明它**明確地保留了偏移項**,儘管這似乎還沒有被記錄在任何地方...... –
查看'?offset'文檔說''可以有多於一個模型公式中的一個偏移量,但是 - 是n不支持偏移項(和等於+)。「'。這可能是你的'offset()'術語沒有簡化的原因嗎? –
不是最迷人的,但你可以嘗試添加一個'offset(-b)'而不是?你的公式不會簡化,但我認爲效果應該是一樣的。如果您嘗試使用lm(mpg_ cyl,data = mtcars); lm(mpg_cyl + offset(disp),data = mtcars); lm(mpg_cyl + offset(disp)+ offset(-disp),data = mtcars);'你看第一個和第三個'lm()'是一樣的。 –