展开R公式

MyQ*_*MyQ 4 r

它可能看起来像一个简单的问题,但有任何快速和强大的方式来扩展公式

f=formula(y ~ a * b )
Run Code Online (Sandbox Code Playgroud)

y~a+b+ab
Run Code Online (Sandbox Code Playgroud)

Gre*_*gor 5

我试试这个:

f = y ~ a * b
reformulate(labels(terms(f)), f[[2]])
# y ~ a + b + a:b
Run Code Online (Sandbox Code Playgroud)

它也适用于更复杂的公式,并依赖于更多的内部.(我假设你想要一个有用的formula对象,所以结果a:bab问题或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)

  • 这可以写成:`reformulate(labels(terms(f)))` (4认同)

d.b*_*d.b 2

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)

  • 对于手动输入的“2:3”,我不确定这是否符合“稳健”的条件...... (2认同)