替代 mapply 以选择样本

问题描述

我创建了一个 mapply 函数来从数据集中选择样本,但是否有任何更快的方法来避免 mapply,因为它很慢而且我有一个更大的数据集?我的目标是使用更多的矩阵/向量运算,减少列表的使用。

#A list of a set of data to be selected
bl <- list(list(c(1,2),c(2,3),c(3,4),c(4,5),c(5,6),c(6,7),c(7,8),c(8,9)),list(c(1,2,3,4,5,6,7,8)),8,9)))
#Number of elements to be selected
kn <- c(5,3)
#Total number of elements in each set
nb <- c(8,5)
#This output a list but preferably I would like a matrix 
bl_func <- function() mapply(function(x,y,z) {
  x[sample.int(y,z,replace = TRUE)]
},bl,nb,kn,SIMPLIFY = FALSE)

编辑 正如@LMc 所建议的,parallel::mcmapply 确实更快:

mc.cores=parallel::detectCores()-1
bl_func <- function() parallel::mcmapply(function(x,SIMPLIFY = FALSE)

bl_func.0 <- function() mapply(function(x,SIMPLIFY = FALSE)

library(microbenchmark)
microbenchmark(
  para = bl_func(),nopara = bl_func.0(),times = 100
)
Unit: microseconds
   expr      min       lq  mean  median    uq   max neval
   para 11601.12 18176.46 19901 20402.4 21872 26457   100
 nopara    37.34    90.86  1275   246.5  1311  9159   100

不过,我仍然很好奇在没有并行进程的帮助下加快速度的其他方法。任何想法将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)