R 既然invoke()已不推荐使用,那么';还有什么选择?
现在已被弃用、退役。如今,以编程方式使用参数列表调用函数的整洁方法是什么使用R 既然invoke()已不推荐使用,那么';还有什么选择?,r,functional-programming,tidyverse,R,Functional Programming,Tidyverse,现在已被弃用、退役。如今,以编程方式使用参数列表调用函数的整洁方法是什么使用exec而不是invoke;使用map2plusexec而不是invoke\u map invoke 使用失效的调用 set.seed(2020) invoke(rnorm, list(mean = 1, sd = 2), n = 10) #[1] 1.7539442 1.6030967 -1.1960463 -1.2608118 -4.5930686 2.4411470 #[7] 2.8782420 0.5
exec
而不是invoke
;使用map2
plusexec
而不是invoke\u map
invoke
使用失效的调用
set.seed(2020)
invoke(rnorm, list(mean = 1, sd = 2), n = 10)
#[1] 1.7539442 1.6030967 -1.1960463 -1.2608118 -4.5930686 2.4411470
#[7] 2.8782420 0.5412445 4.5182627 1.2347336
使用exec
set.seed(2020)
exec(rnorm, n = 10, !!!list(mean = 1, sd = 2))
#[1] 1.7539442 1.6030967 -1.1960463 -1.2608118 -4.5930686 2.4411470
#[7] 2.8782420 0.5412445 4.5182627 1.2347336
set.seed(2020)
map2(
list(rnorm),
list(list(mean = 0, sd = 1), list(mean = 1, sd = 1)),
function(fn, args) exec(fn, n = 10, !!!args))
# [[1]]
# [1] 0.3769721 0.3015484 -1.0980232 -1.1304059 -2.7965343 0.7205735
# [7] 0.9391210 -0.2293777 1.7591313 0.1173668
#
# [[2]]
# [1] 0.1468772 1.9092592 2.1963730 0.6284161 0.8767398 2.8000431
# [7] 2.7039959 -2.0387646 -1.2889749 1.0583035
invoke\u map
类似地,与exec
一起使用map2
,而不是invoke\u map
。以前,您会使用invoke\u map
使用具有不同参数集的函数
set.seed(2020)
invoke_map(rnorm, list(list(mean = 0, sd = 1), list(mean = 1, sd = 1)), n = 10)
# [[1]]
# [1] 0.3769721 0.3015484 -1.0980232 -1.1304059 -2.7965343 0.7205735
# [7] 0.9391210 -0.2293777 1.7591313 0.1173668
#
# [[2]]
# [1] 0.1468772 1.9092592 2.1963730 0.6284161 0.8767398 2.8000431
# [7] 2.7039959 -2.0387646 -1.2889749 1.0583035
现在,将map2
与exec
set.seed(2020)
exec(rnorm, n = 10, !!!list(mean = 1, sd = 2))
#[1] 1.7539442 1.6030967 -1.1960463 -1.2608118 -4.5930686 2.4411470
#[7] 2.8782420 0.5412445 4.5182627 1.2347336
set.seed(2020)
map2(
list(rnorm),
list(list(mean = 0, sd = 1), list(mean = 1, sd = 1)),
function(fn, args) exec(fn, n = 10, !!!args))
# [[1]]
# [1] 0.3769721 0.3015484 -1.0980232 -1.1304059 -2.7965343 0.7205735
# [7] 0.9391210 -0.2293777 1.7591313 0.1173668
#
# [[2]]
# [1] 0.1468772 1.9092592 2.1963730 0.6284161 0.8767398 2.8000431
# [7] 2.7039959 -2.0387646 -1.2889749 1.0583035
遗憾的是,map2
plusexec
语法不如invoke\u map
简洁,但它可能更规范
使用map2
plusexec
时可能有助于避免问题的一些注释:
map2
的第一个参数必须是列表
。因此map2(列表(rnorm),…)
将起作用。仅将函数提供为map2(rnorm,…)
不会。这与invoke\u map
不同,后者接受函数的列表和函数本身
list
s的list
map2
将迭代顶级列表
,然后使用big bang操作符
在exec
内强制拼接函数参数的列表李>
你能举一个具体的例子说明你想做什么吗?可能没有一个完整的替代品,但可能有一个替代品来做某件特定的事情。