R:加速嵌套的应用调用

时间:2014-05-07 19:18:07

标签: r apply

我正在尝试编写一段似乎需要嵌套*apply调用的逻辑。

mProb = matrix(rbeta(1000*5, shape1 = 2, shape2 = 3), nrow = 1000, ncol = 5)
vSize = c(900, 1100, 1300, 450, 620)

mIndices = apply(mProb, 1, function(x) {
  do.call(rbind, lapply(1:5, function(y) {
    cbind(sample.int(n = vSize[y], size = floor(vSize[y]*x[y])), y) 
  })) 
})

有更优雅的方式来编码吗?如果需要,我可以为代码提供上下文。

1 个答案:

答案 0 :(得分:0)

我认为mapply()对于这个问题来说更加优雅和干净,而且似乎更快一些:

mIndices <- mapply(sample.int, size=floor(t(mProb) * vSize), n=vSize    )
dim(mIndices) <- c(5,1000)

mIndices现在是一个二维列表,第一个维度对应于 vSize的元素,以及与复制数对应的第二个dim。如果您真的 想要在矩阵列表中,您可以使用嵌套的应用来重塑它:

mIndices <- lapply(1:1000, function(s) {
    do.call(rbind, mapply(cbind, mIndices[,s], 1:5)  )
})