代码之家  ›  专栏  ›  技术社区  ›  student_R123

用lappy算法生成变参数随机数

  •  2
  • student_R123  · 技术社区  · 7 年前

    我需要生成具有不同参数的随机数(二项式)。 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 回复  |  直到 7 年前
        1
  •  6
  •   Karolis Koncevičius    7 年前

    更好地使用 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(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
    
        2
  •  2
  •   akrun    7 年前

    或使用 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