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