使用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
}发布于 2017-08-26 23:33:27
感人的评论来回答。
正如您在文档中提到的,您指的是:
LHS上的规则略有不同:未引号的操作数应该计算为字符串或符号。
在这里,它的工作是因为x_实际上是一个字符。
https://stackoverflow.com/questions/45896897
复制相似问题