Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 既然invoke()已不推荐使用,那么';还有什么选择?_R_Functional Programming_Tidyverse - Fatal编程技术网

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
plus
exec
而不是
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
plus
exec
语法不如
invoke\u map
简洁,但它可能更规范

使用
map2
plus
exec
时可能有助于避免问题的一些注释:

  • map2
    的第一个参数必须是
    列表
    。因此
    map2(列表(rnorm),…)
    将起作用。仅将函数提供为
    map2(rnorm,…)
    不会。这与
    invoke\u map
    不同,后者接受函数的
    列表和函数本身
  • 第二个参数需要是参数
    list
    s的
    list
    map2
    将迭代顶级
    列表
    ,然后使用big bang操作符
    exec
    内强制拼接函数参数的
    列表
    
    你能举一个具体的例子说明你想做什么吗?可能没有一个完整的替代品,但可能有一个替代品来做某件特定的事情。