メモ:dplyr::mutate()に引数のリストを渡したいときは.dotでがんばるよりpurrr::invoke()
これはうまくいく。
common_params <- list(zero = 0, one = 1) data.frame(x = seq(1, 10)) %>% mutate_(.dots = common_params) #> x zero one #> 1 1 0 1 #> 2 2 0 1 #> 3 3 0 1 #> 4 4 0 1 #> 5 5 0 1 #> 6 6 0 1 #> 7 7 0 1 #> 8 8 0 1 #> 9 9 0 1 #> 10 10 0 1
でもこれは、数値の場合は0
という表現式が評価されると数値の0
になるからたまたまうまくいっているだけで、文字列だとうまくいかない。
common_params <- list(zero = "ゼロ", one = "イチ") data.frame(x = seq(1, 10)) %>% mutate_(.dots = common_params) #> Error: binding not found: 'ゼロ'
こういうときは、素直にdo.call()
とかinvoke()
とかすればいい。
data.frame(x = seq(1, 10)) %>% invoke(.f = mutate, .x = common_params, .data = .) #> x zero one #> 1 1 ゼロ イチ #> 2 2 ゼロ イチ #> 3 3 ゼロ イチ #> 4 4 ゼロ イチ #> 5 5 ゼロ イチ #> 6 6 ゼロ イチ #> 7 7 ゼロ イチ #> 8 8 ゼロ イチ #> 9 9 ゼロ イチ #> 10 10 ゼロ イチ
別にわざわざdplyrとかpurrrとか無理して使う必要ない気もするけど。