【发布时间】:2021-11-18 18:36:32
【问题描述】:
我想在 R 中定义公式的不同部分,然后将这些部分连接起来 - 不一定只是通过将术语相加。我可以想象这样的语法:
# define one-handed formulas
part_1 <- ~ x:w
part_2 <- ~ y + z
# concatenate, e.g. with glue syntax
f <- y ~ a + {part_1}:{part_2}
对我来说,这似乎是一个自然的应用程序,所以我想知道基础 R 中是否有这种功能。有些包确实提供了解决方案,但附带了其他字符串。
我在基础 R 中做这件事的努力没有成功:
# does not work: update inserts "part_2" literally
update(part_1, ~ . + part_2)
#> ~part_2 + x:w
# reformulate uses + to concatenate
reformulate(c(attr(terms(part_1), "term.labels"),
attr(terms(part_2), "term.labels")))
#> ~x:w + y + z
已经编写了公式的合并方法(例如,here 和 here),但不允许与除加法之外的任何内容进行连接。
目前我能找到的唯一解决方案是来自fixest 的宏符号:
library(fixest)
setFixest_fml(..part_1 = ~ x:w)
setFixest_fml(..part_2 = ~ y + z)
f <- y ~ a + (..part_1):(..part_2)
xpd(f)
#> y ~ a + (x:w):(y + z)
attr(terms(xpd(f)), "term.labels")
#> [1] "a" "y:x:w" "x:w:z"
由reprex package (v2.0.1) 于 2021 年 11 月 18 日创建
【问题讨论】: