如何使用lapply()存储模拟结果?mclapply多核使用问题求助
解决方案
问题分析
你原来的代码用lapply遍历空列表虽然能生成结果,但没必要提前创建空列表,换成mclapply实现多核加速的话,直接指定循环次数即可,同时要注意mclapply的系统兼容性。
代码实现(Linux/macOS)
首先加载parallel包,然后用mclapply直接生成100组模拟数据:
# 加载并行计算包 library(parallel) # 生成100个模拟结果,每个结果是50个正态分布数据 sim_results <- mclapply(1:100, function(x) rnorm(n = 50))
- 这里
1:100指定循环100次,每次执行匿名函数生成50个正态随机数 - 可以通过
mc.cores参数指定使用的核数,比如mc.cores = 4,默认会用全部可用核,也可以用detectCores()自动获取:sim_results <- mclapply(1:100, function(x) rnorm(50), mc.cores = detectCores())
Windows系统替代方案
mclapply依赖系统的fork机制,Windows不支持,需要用parLapply:
library(parallel) # 创建并行集群 cl <- makeCluster(detectCores()) # 生成模拟结果 sim_results <- parLapply(cl, 1:100, function(x) rnorm(n = 50)) # 关闭集群 stopCluster(cl)
验证结果
运行后sim_results就是包含100个元素的列表,每个元素是长度为50的数值向量,你可以用length(sim_results)查看列表长度,用length(sim_results[[1]])查看单组数据的长度。
内容的提问来源于stack exchange,提问作者LifeisGood94
相关产品推荐
相关产品推荐

