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