如何在 `reformulate` 中转义 invalid/syntactically 不明确的术语名称?

How to escape invalid/syntactically ambiguous term names in `reformulate`?

我使用 reformulate 构建涉及一组 Reddit 用户名指标的公式。不幸的是,reformulate 似乎将传递的术语名称中的字符串连接起来并对其进行解析,这会导致一些奇怪的问题,这些术语是有效的用户名,但不是有效的标识符:

> reformulate(c("123a", "x"), "y")
Error in str2lang(termtext) : <text>:1:4: unexpected symbol
1: 123a
       ^

更糟糕的是,可能会发生这样的事情:

> reformulate(c("x", "a-b-1", "z"), "y")
y ~ x + a - b - 1 + z

如何使用某种“转义机制”而不诉诸字符串处理来解决这个问题?

使用反引号引用每个术语名称,将每个用户名指定为单独的 :

> paste0("`", c("123a", "a-b-1", "z"), "`")
[1] "`123a`"  "`a-b-1`" "`z`" 
> reformulate(paste0("`", c("123a", "a-b-1", "z"), "`"), "y")
y ~ `123a` + `a-b-1` + z

反引号不会成为术语名称的一部分。正如您在 z 中看到的那样,句法名称保持不变。