从 purrr::invoke_map 到 rlang::exec(翻译行为)

From purrr::invoke_map to rlang::exec (translate behavior)

我注意到 purrr::invoke_map() 和他的亲戚退休了,有利于 rlang::exec()purrr::mapas documentation specified 一起使用。

在某些情况下,当您想突出显示不同的参数集以通过函数传递时,purrr::invoke_map 非常有表现力,例如:

# create different settings of arguments in a list
args_list <- list(set1 = list(n = 5, mean = 0, sd = 1),
                  set2 = list(n = 5, mean = 10, sd = 2))

# pass each setting by the function
invoke_map(rnorm, args_list)

在文档中,您可以找到以下使用 exec + map2 来模拟上述行为的内容:

 # Before:
 invoke_map(fns, list(args))
 invoke_map(fns, list(args1, args2))

 # After:
 map(fns, exec, !!!args)
 map2(fns, list(args1, args2), function(fn, args) exec(fn, !!!args))

我们如何使用 exec + map2 翻译之前描述的模式?

使用 map,当您必须将相同的功能应用到 args_list 时。

library(purrr)
args_list <- list(set1 = list(n = 5, mean = 0, sd = 1),
                  set2 = list(n = 5, mean = 10, sd = 2))

map(args_list, ~exec(rnorm, !!!.x))

当您想应用不同的功能时使用map2

args_list <- list(set1 = list(n = 5, mean = 0, sd = 1),
                  set2 = list(n = 3, min = 1, max = 2))

map2(args_list, list(rnorm, runif), ~exec(.y, !!!.x))