генерировать случайное число с различными параметрами, используя lapply в R - PullRequest
0 голосов
/ 04 октября 2018

Мне нужно генерировать случайные числа (биномиальные) с различными параметрами.Я пытаюсь сделать это с помощью функции lapply.

На данный момент это мой код:

lst1 <- list(n=c(10,20), size=c(100,200), q=c(0.1,0.2)) #list of variables

lapply(lst1, function(x) {
  rbinom(x[1],x[2],x[3])
})

Кажется, есть ошибка.

Тогда я тоже попробовал,

lapply(lst1, function(x) {
  rbinom(x$n,x$size,x$q)
})

Тем не менее я получаю ошибку.Может кто-нибудь помочь мне разобраться с ошибкой?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Или используйте pmap из purrr после сопоставления имен list с аргументами функции.

names(formals(rbinom))
#[1] "n"    "size" "prob"

Здесь 'q' можно переименовать в 'prob'

library(purrr)
names(lst1)[3] <- 'prob'
pmap(lst1, rbinom)
#[[1]]
# [1] 13  9 12 19 11  8 14 13 16  7

#[[2]]
# [1] 42 52 37 48 41 33 34 31 47 41 41 40 39 42 41 41 52 47 42 49
0 голосов
/ 04 октября 2018

Лучше использовать Map вместо lapply, когда функция должна каждый раз получать различный набор параметров:

> Map(rbinom, lst1$n, lst1$size, lst1$q)
[[1]]
 [1] 15  7  8 12  9 11  4  9 12  7

[[2]]
 [1] 47 40 37 54 40 39 39 43 50 33 34 37 42 31 26 34 31 38 43 43

С lapply вы можете сделать это следующим образом:

lapply(1:2, function(ind) rbinom(lst1$n[ind], lst1$size[ind], lst1$q[ind]))
[[1]]
 [1] 10 18  7  9  9 18  7  8  8 10

[[2]]
 [1] 46 42 44 37 38 40 52 44 42 38 40 35 41 46 44 38 41 32 61 33
...