引数に データフレーム
と データフレーム中の変数
を指定可能な自作関数を作りたいときがある。
例えば、
iris %>% select(Sepal.Length)
という超簡単な処理を Sepal.Length
以外の変数でも使えるように、この処理を関数化してみよう。直感的にはこんな風に書きたくなるはず。
f <- function(data, var) { # データフレーム内のvarという変数を選択 .d <- data %>% select(var) # 出力 return(.d) } f(data = iris, var = Sepal.Length)
しかし、これだと上手く動かない。NSE処理のせいである。こうすればうまくいく。
f <- function(data, var) { # NSE処理 var <- rlang::enquo(var) var_label <- rlang::as_label(var) # データフレーム内のvarという変数を選択 .d <- data %>% select(!!var_label) # 出力 return(.d) } f(data = iris, var = Sepal.Length)
これで動くはず。