这可能看起来是一个简单的问题,但是否有任何快速而强大的方法来扩展类似于的公式:
f=formula(y ~ a * b )
为了
y~a+b+ab
f = y ~ a * b
reformulate(labels(terms(f)), f[[2]])
# y ~ a + b + a:b
它也可以用于更复杂的公式,并依靠更多内部内容。(我假设您希望得到一个有用的formula
对象,因此在结果中,a:b
比问题中的ab
或d.b的答案中的a*b
更好。)
f = y ~ a + b * c
reformulate(labels(terms(f)), f[[2]])
# y ~ a + b + c + b:c
f = y ~ a + (b + c + d)^2
reformulate(labels(terms(f)), f[[2]])
# y ~ a + b + c + d + b:c + b:d + c:d
vec = all.vars(f)
reformulate(c(vec[2:3], paste(vec[2:3], collapse = "*")), vec[1])
#y ~ a + b + a * b
reformulate(c(vec[-1], paste(vec[-1], collapse = "*")), vec[1])
来重新表达它?(或者使用 collapse=":"
) - r2evans
重构(标签(术语(f)))
。 - G. Grothendieck