purrr :: pmap с другими входами по умолчанию - PullRequest
0 голосов
/ 20 декабря 2018

Мне интересно, как использовать функцию 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

Но, как вы можете видеть, выход не отображает mean и sd в порядке векторов.

Я хочу получить [[1]] с rnorm(mean=5,sd=1,n=9) и так далее.Из любопытства мне интересно, что pmap() делает для этой демонстрации.

Кстати, я знаю, что в этом примере я легко могу использовать map2() без каких-либо хлопот, но в моем реальном коде у меня есть 10 входов, поэтому мне нужно использовать pmap().

Заранее спасибо за любые ответы!

1 Ответ

0 голосов
/ 20 декабря 2018

Когда вы используете 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 раза и сохраняет его в списке.

...