当变量具有嵌入空间时,如何在R中使用重新格式化

时间:2019-02-19 21:00:43

标签: r

当termlabel具有嵌入空格时,使用reformulate()所需的正确字符串解析是什么?

这有效:

reformulate(c("A", "B"), "Y")
Y ~ A + B

这些都失败了:

reformulate(c("A var", "B"), "Y")
reformulate(quote(c("A var", "B")), "Y")
reformulate(as.formula(quote(c("A var", "B"))), "Y")

预期结果:

Y ~ `A var` + B
# or 
Y ~ `A var` + `B`

注意
我无法对反引号进行硬编码。这是一个较大的闪亮应用程序的一部分,因此,如果答案是反引号,则我需要一种以编程方式进行此操作的方法。

2 个答案:

答案 0 :(得分:1)

使用反引号,例如

reformulate(c("`A var`", "B"), "Y")
#Y ~ `A var` + B

或者更好的是,不要在变量名中使用空格。

或具有帮助功能

bt <- function(x) sprintf("`%s`", x)
reformulate(c(bt(var1), var2), "Y")
#Y ~ `A var` + B

答案 1 :(得分:1)

还有其他几种使用符号而不是字符串的方式(因此不需要显式的反引号)。

input <- "A var"
eval(bquote( Y ~ .(as.name(input)) + B))
# Y ~ `A var` + B

eval(substitute( Y ~ INPUT + B, list(INPUT = as.name(input))))
# Y ~ `A var` + B

library(rlang)
eval(expr(Y ~ !!sym(input) + B))
# Y ~ `A var` + B