问题描述
我创建了一个 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 (将#修改为@)