foreach包增强了R循环遍历功能,并且提供了并行执行能力。本文通过示例带你轻松掌握这个高级技能。

foreach语法介绍

%do% 和 %dopar% 是对遍历对象执行一段业务功能代码的操作。

# 串行执行使用 --> %do%
output <- foreach(i = 'some object to iterate over', 'options') %do% {ex}# 并行执行使用 --> %dopar%
output <- foreach(i = 'some object to iterate over', 'options') %dopar% {ex}

其中ex是表达式,在foreach循环环境中会被运行多次,%do%串行执行,%dopar%并行执行。
执行ex的结果默认作为list类型返回,我们通过.combine参数指定返回结果类型。c用于连接执行结果为向量类型,‘cbind’ 和 ‘rbind’ 合并向量为矩阵类型,‘+’ 和 ‘*’ 用于处理数值类型。

简单示例

# 求平方
# 等效于 square <- function(x) x^2; lapply(1:3, square)
foreach(i=1:3) %do%i^2##多个参数foreach(i=1:4, j=7:10) %do%sqrt(i*j)# 等效于 colMeans(m)
# 生成3*3矩阵
m <- matrix(rnorm(9), 3, 3)
# c 生成向量
foreach(i=1:ncol(m), .combine=c) %do%mean(m[,i])
# 结果
# [1]  0.5745559 -0.1177918  1.4583174

并行执行

在执行并行计算之前,需要声明集群,即告诉R我们有多个核(cpu)。具体步骤如下:

  1. 加载包doParallel,增强foreach函数的功能
  2. 检测机器CPU核数,一般规则是至少保留一核执行其他任务。假设你是8核,则最多设置为7
  3. 声明集群,使用makeCluster(coreNum, type).

其中type可以为PSOCK、FORK,前者创建新的session,后者拷贝当前session;

  1. 使用registerDoParallel函数注册集群。
library(doParallel)
detectCores()
# 8myCluster <- makeCluster(7, # number of cores to usetype = "FORK") # type of cluster
# 注册计算
registerDoParallel(myCluster)data <- foreach(item = 1:10, .combine = 'c') %dopar% {item = item *2
}data

综合示例实战

最后我们通过实际例子展示如何高效使用foreach函数。
某业务每天的记录保留在当天日期(yyyy-MM-dd)为文件夹的data.csv文件中,现在我们编写函数一次性读取一段时间内的所有记录并合并结果为数据框。

假设文件夹为sales,则其中内容为:
2022-01-01/data.csv
2022-01-02/data.csv

2022-06-09/data.csv

代码如下:

library(plyr)
library(foreach)readCsvDates <- function(base.dir, date.from, date.to) {# 字符串转为日期date.from <- as.Date(date.from)date.to <- as.Date(date.to)# 生成日期序列dates <- seq.Date(date.from, date.to, by = "day")# 利用foreach读取文件,ldply组合结果为数据框x <- ldply(foreach(day = dates, combine = rbind) %do% {read.csv(sprintf("%s/%s/data.csv", base.dir, day),header = T,sep = "\t", stringsAsFactors = F)})x
}## 定义readData函数
readSales <- function(date.from, date.to) {data <- readCsvDates("sales", date.from, date.to)data
}# 执行文件加载,生成数据框
result <- readSales("2022-05-01", "2022-05-02")
head(result)

R语言并行计算实战教程相关推荐

  1. 2020互联网数据分析师教程视频 统计学分析与数据实战 r语言数据分析实战 python数据分析实战 excel自动化报表分析实战 excel数据分析处理实战

    2020互联网数据分析师教程视频 统计学分析与数据实战 r语言数据分析实战 python数据分析实战 excel自动化报表分析实战 excel数据分析处理实战

  2. R语言学习实战——解决边际分布图

    目录 0 R语言概述 1 本次实战简介 2 涉及的工具包 2.1 ggplot2简介 2.2 ggExtra简介 2.3 ggpointdensity简介 3 开始画图 3.1 安装并载入 3.2 导 ...

  3. R语言R-markdown实战示例、R-markdown、R-markdown生成结果汇报的HTML文件

    R语言R-markdown实战示例.R-markdown.R-markdown生成结果汇报的HTML文件 目录 R语言R-markdown实战示例.R-markdown.R-markdown生成结果汇 ...

  4. 三十四、R语言数据分析实战

    @Author : By Runsen @Date : 2020/5/14 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...

  5. R语言数据挖掘实战系列(4)

    R语言数据挖掘实战系列(4)--数据预处理 数据预处理一方面是要提高数据的质量,另一方面是要让数据更好地适应特定的挖掘技术或工具.数据预处理的主要内容包括数据清洗.数据集成.数据变换和数据规约. 一. ...

  6. r语言中which的使用_大数据分析R语言RStudio使用教程

    RStudio是用于R编程的开源工具.如果您对使用R编程感兴趣,则值得了解RStudio的功能.它是一种灵活的工具,可帮助您创建可读的分析,并将您的代码,图像,注释和图解保持在一起. 在此大数据分析R ...

  7. 大数据分析R语言RStudio使用教程

    RStudio是用于R编程的开源工具.如果您对使用R编程感兴趣,则值得了解RStudio的功能.它是一种灵活的工具,可帮助您创建可读的分析,并将您的代码,图像,注释和图解保持在一起. 在此大数据分析R ...

  8. 统计学习导论之R语言应用(四):分类算法R语言代码实战

    统计学习导论之R语言应用(ISLR) 参考资料: The Elements of Statistical Learning An Introduction to Statistical Learnin ...

  9. 统计学习导论之R语言应用(三):线性回归R语言代码实战

    统计学习导论(ISLR) 参考资料 The Elements of Statistical Learning An Introduction to Statistical Learning 统计学习导 ...

最新文章

  1. baidumaptrace.php,鹰眼Web API v2.0 | 百度地图API SDK
  2. 如何在 Windows 中检查计算机正常运行时间
  3. flask_socketio 用法:
  4. 怎么把照片做成立方体在html播放,立方体照片.html
  5. css3实现烟花效果,CSS3 带颤动效果的简易烟花动效
  6. python的for循环语句怎么写_python中的for循环语句怎么写
  7. 阅读笔记:基础知识(Java篇)
  8. 用模版实现简单的内存池
  9. 简单、有效、全面的Kubernetes监控方案
  10. WCF服务寄宿IIS与Windows服务 - C#/.NET
  11. Redis 常用配置参数
  12. STM32F103_步进电机
  13. 12月15日学习内容整理:ORM中的queryset类型,中介模型,extra函数和分组补充
  14. 力扣——最后一个单词的长度
  15. linux查看jdk详细版本号,linux系统上用什么命令查看本机运行的jdk的版本的
  16. 论文选题的原则、来源与方法
  17. python汇率转换
  18. 我也撸了一个古诗词网站
  19. 开源基础软件大时代,与国产深度学习框架一起乘风破浪
  20. 看美文,记单词(5)

热门文章

  1. android自定义相机拍照
  2. pwn libc找偏移的在线网站
  3. 12月给自己一个逆袭的机会,社科院与杜兰大学金融管理硕士项目期待你的加入
  4. Unity 2D角色动画状态切换
  5. 主题计算机一级,Office2007文档主题的应用或自定义
  6. 汽车电子学习【车载网络CAN/LIN】
  7. android 流星动画,超简单的android 流星雨动画 流星动画
  8. css实现旋转的小流星动画
  9. 基于UFEI下的win10 + Ubuntu18.04双系统攻略!!!
  10. 【Python爬虫】下载b站视频。超详细。