代码之家  ›  专栏  ›  技术社区  ›  JasonAizkalns

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

r
  •  1
  • JasonAizkalns  · 技术社区  · 6 年前

    需要使用什么样的正确字符串解析 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`
    

    笔记
    我不能硬编码反勾号。这是一个更大的闪亮应用程序的一部分,因此,如果backticks是答案,那么我需要一个方法以编程方式实现这一点。

    1 回复  |  直到 6 年前
        1
  •  2
  •   moodymudskipper    6 年前

    这里有一些处理符号而不是字符串的其他方法(因此不需要显式反勾号)。

    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
    
        2
  •  1
  •   Maurits Evers    6 年前

    使用反勾号,例如。

    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