它可能看起来像一个简单的问题,但有任何快速和强大的方式来扩展公式
f=formula(y ~ a * b )
Run Code Online (Sandbox Code Playgroud)
至
y~a+b+ab
Run Code Online (Sandbox Code Playgroud)
我试试这个:
f = y ~ a * b
reformulate(labels(terms(f)), f[[2]])
# y ~ a + b + a:b
Run Code Online (Sandbox Code Playgroud)
它也适用于更复杂的公式,并依赖于更多的内部.(我假设你想要一个有用的formula对象,所以结果a:b比ab问题或a*bdb的答案更好.)
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
Run Code Online (Sandbox Code Playgroud)
vec = all.vars(f)
reformulate(c(vec[2:3], paste(vec[2:3], collapse = "*")), vec[1])
#y ~ a + b + a * b
Run Code Online (Sandbox Code Playgroud)