いくつかのベクトルとデータフレームがあるとします:
a <- c(1, 2, 0, 1)
b <- c(6, 4)
df1 <- data_frame(x = c(6, 8, 12), y = c(24, 18, 16))
データフレームの列の平均とベクトルの平均を計算する非標準評価を使用して関数を作成します。
calculate_means <- function(df, column, vector) {
column <- enquo(column)
summarise(df, mean_column = mean(!!column), mean_vector = mean(vector))
}
calculate_means(df1, x, a)
# A tibble: 1 x 2
mean_column mean_vector
<dbl> <dbl>
1 8.67 1.00
calculate_means(df1, y, b)
# A tibble: 1 x 2
mean_column mean_vector
<dbl> <dbl>
1 19.3 5.00
それは期待どおりに機能します。しかし、同じ関数を記述して、パラメーターに別の名前を選択するとどうなるでしょうか?
calculate_means <- function(df, x, y) {
x <- enquo(x)
summarise(df, mean_column = mean(!!x), mean_vector = mean(y))
}
calculate_means(df1, x, a)
# A tibble: 1 x 2
mean_column mean_vector
<dbl> <dbl>
1 8.67 19.3
calculate_means(df1, y, b)
# A tibble: 1 x 2
mean_column mean_vector
<dbl> <dbl>
1 19.3 19.3
最初のパラメーターは以前と同じように評価されますが、2 番目のパラメーターは常にデータフレームの列 "y" を評価しています。ベクトル「a」と「b」をそれぞれ評価するべきではありませんか?