eval(parse(text=...))をモダンに書きたい

掲題の件、 eval(parse(text=...))をモダンな書き方にしたいと思って、r-wakalangで回答貰ったやつのメモ。

昔ながら(一部、purrr使ってるんでモダンにも見えるが・・・)の書き方だとこんなん

> hoge1 <- function(x){x+1}
> hoge2 <- function(x){x+2}
> 
> purrr::map(paste0("hoge", 1:2), ~ eval(parse(text=.x))(1))
[[1]]
[1] 2

[[2]]
[1] 3

これをモダンに書こうとすると、以下のようにするのが良いらしい

> purrr::map(paste0("hoge", 1:2), ~ rlang::eval_tidy(rlang::sym(.x))(1))
[[1]]
[1] 2

[[2]]
[1] 3

> purrr::invoke_map(rlang::set_names(c("hoge1", "hoge2")), 1)
$hoge1
[1] 2

$hoge2
[1] 3

非常に勉強になった。

追記
後に教えてもらった以下が一番きれいかも。

> list(hoge1, hoge2) %>%
+   map(~ .(iris)) %>%
+   bind_rows()
  Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
1          5.1         3.5          1.4         0.2    setosa
2          5.9         3.0          5.1         1.8 virginica