1
使用foo(c("b"))
調用以下函數。輸出顯示爲內聯。爲什麼表達式的LHS中的`rlang :: sym`和`rlang :: quo_name`的行爲類似?
我很困惑,爲什麼(1)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
}
根據[documentation](http://dplyr.tidyverse.org/articles/programming.html#setting-variable-names)中提到的,你指的是:* LHS的規則略有不同:未加引號的操作數應計算爲字符串或符號*。它工作是因爲'x_'是一個字符。 –
你是對的!我錯過了「......或符號」部分。如果將評論移至答案,我可以繼續並接受。 – Shantanu