2

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

我很困惑为什么两者(1)df %>% mutate(!!x_ := 100 + !!x))和 (2)df %>% mutate(!!x := 100 + !!x))工作方式相同感到困惑;仅基于dplyr 编程配方(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  

}
4

1 回答 1

4

移动评论回答。

根据您所指的文档中所述:

规则LHS略有不同:未加引号的操作数应计算为字符串或符号

在这里,它之所以有效,是因为它x_实际上是一个角色。

于 2017-08-26T23:33:27.577 回答