扩展 R 公式

5
这可能看起来是一个简单的问题,但是否有任何快速而强大的方法来扩展类似于的公式:
f=formula(y ~ a * b )

为了

y~a+b+ab
2个回答

8
我会尝试这样做:
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

4
这可以被表述为:重构(标签(术语(f))) - G. Grothendieck
感谢您的出色简化! - Gregor Thomas

2
vec = all.vars(f)
reformulate(c(vec[2:3], paste(vec[2:3], collapse = "*")), vec[1])
#y ~ a + b + a * b

折叠符号可能更适合使用冒号。 - Gregor Thomas
2
而且,由于手动输入的“2:3”,我不确定这是否符合“健壮”的标准... - Gregor Thomas
也许可以使用reformulate(c(vec[-1], paste(vec[-1], collapse = "*")), vec[1])来重新表达它?(或者使用 collapse=":" - r2evans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接