代码之家  ›  专栏  ›  技术社区  ›  Shantanu Ben Bolker

为什么表达式LHS中的“rlang::sym”和“rlang::quo_name”行为相似?

  •  2
  • Shantanu Ben Bolker  · 技术社区  · 7 年前

    使用调用下面的函数 foo(c("b")) . 输出以内联方式显示。

    df %>% mutate(!!x_ := 100 + !!x)) 和(2) df %>% mutate(!!x := 100 + !!x)) dplyr programming recipes 只有(1)应该有效。

    foo <- function(variables) {
    
      x <- rlang::sym(variables[[1]])
    
      x_ <- quo_name(x)
    
      print(x)
      #> b
    
      print(typeof(x))
      #> [1] "symbol"
    
      print(x_)
      #> [1] "b"
    
      print(typeof(x_))
      #> [1] "character"
    
      df <- data_frame(a = 1, b = 2)
    
      print(df %>% mutate(!!x_ := 100 + !!x))
    
      #> # A tibble: 1 x 2
      #>         a     b
      #>       <dbl> <dbl>
      #>   1     1   102  
    
      print(df %>% mutate(!!x := 100 + !!x))
    
      #> # A tibble: 1 x 2
      #>         a     b
      #>       <dbl> <dbl>
      #>   1     1   102  
    
    }
    
    1 回复  |  直到 7 年前
        1
  •  4
  •   Steven Beaupré    7 年前

    移动评论以回答。

    根据 documentation 您指的是:

    关于 LHS 略有不同:无引号的操作数 字符串或符号

    在这里,它起作用是因为 x_ 实际上是一个角色。