4

我想知道pmap()如果我有超过 3 个输入作为参数映射到具有其他默认输入的函数,如何使用函数。

这是一个可重现的示例:

a=c(5, 100, 900)
b=c(1, 2, 3)
ablist=list(mean=a,sd=b)
pmap(ablist, ~rnorm( mean=a , sd=b , n = 9))

输出:

 [[1]]
 [1]   5.734723  99.883171 895.962561   5.346905  98.723191 903.373177   4.172267  96.424440 897.437970

 [[2]]
 [1]   4.427977  98.348139 899.287248   4.404674  99.178516 900.983974   3.836353 101.520355 899.992332

 [[3]]
 [1]   4.961772  95.927525 899.096313   4.444354 101.694591 904.172462   6.231246  97.773325 897.611838

但正如您所看到的,输出不是按向量的顺序映射meansd

我想拥有[[1]]等等rnorm(mean=5,sd=1,n=9)。出于好奇,我想知道pmap()这个演示在做什么。

顺便说一句,我知道在这个例子中,我可以轻松使用map2(),但在我的真实代码中,我有 10 个输入,所以我需要使用pmap().

提前感谢您的任何回复!

4

1 回答 1

6

当您使用时,您可以使用、等pmap来引用您的参数。这应该可以满足您的需求:..1..2

pmap(ablist, ~rnorm(mean = ..1, sd = ..2, n = 9))

或者,您可以提供一个包含所有参数的命名列表。这也有效:

abclist = list(
  mean = c(5, 100, 900),
  sd = c(1, 2, 3), 
  n = rep(9, 3)
)

pmap(abclist, rnorm)

您的代码仅运行rnorm(mean = c(5, 100, 900), sd = c(1, 2, 3), n = 9)3 次并将其存储在列表中。

于 2018-12-20T18:45:00.253 回答