我想知道如果我有3个以上的输入作为参数映射到具有其他默认输入的函数中,那么如何使用pmap()
函数。
以下是可重现的示例:
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
但是正如您所看到的,输出未按向量顺序映射mean
和sd
。
我想将[[1]]
与rnorm(mean=5,sd=1,n=9)
一起使用,依此类推。出于好奇,我想知道pmap()
正在为此演示做什么。
顺便说一句,在这个示例中,我知道可以很容易地使用map2()
,但是在我的真实代码中,我有10个输入,因此我需要使用pmap()
。
在此先感谢您的答复!
答案 0 :(得分:4)
使用pmap
时,可以使用..1
,..2
等引用您的参数。这应该可以为您提供所需的信息:
pmap(ablist, ~rnorm(mean = ..1, sd = ..2, n = 9))
或者,您可以提供包含所有参数的 all 的命名列表。这也可以:
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次,并将其存储在列表中。