第 11 周

迭代

预习
讲义
作业
发布者

曾永艺

发布日期

2023年11月25日


由于 R 中的很多内置函数都支持向量化操作,我们对已读入内存的数据进行简单的数据处理时通常不需要用到显性的 for 循环。但在某些特定情况下(如不存在相应的向量化函数、分组计算数据框的列汇总统计量、导入 / 输出多个文档等),循环迭代操作可能难以完全避免。R 支持传统命令式编程语言的 forwhileif 等控制结构,同时还支持函数式迭代范式(如 apply 族函数)。

tidyverse 通过核心操作函数的语法设计(如 readr 包的 vroom 引擎、dplyr 包的 group_by().by/by 参数(?dplyr_by)、rowwise()across() 和实验性的 group_map()/group_modify()/group_walk()/group_nest()/group_split()/nest_by()ggplot2 包的 aes() 美学映射和 facet_*() 分面等),进一步减少需要我们手动编写显性循环迭代操作的场合。

此外,tidyverse 下的 purrr 包提供更一致、易用、灵活且强大的函数式迭代工具,并可和 R 语言核心数据结构数据框(tidyverse 下为 tibble)的列表列(list-column)配合使用来完成更为复杂的数据处理 / 分析工作。

本讲主要涵盖以下几方面的内容:

  1. 通常你并不需要手写循环

  2. 控制流结构

  3. 函数式编程

  4. purrr

  5. purrr 包 与 列表列

  6. purrr -> furrr



1. 课前准备

📖 预习 R for Data Science, 2e 第五部分 Program 中关于 迭代基础 R 的章节,即 26 Iteration27 A field guide to base R27.4-27.5

此书第1版有中文翻译版 《R数据科学》出版,对应章节为“第16章 使用 purrr 实现迭代”和“第19章 使用 purrrbroom 处理多个模型”(很遗憾,翻译版的第19章出现大量删减🙃,建议参阅英文原著)。若同学们觉得直接阅读英文原版教材有点吃力 / 费时,可参阅中文翻译版。

由于上课内容较多,而上课时间有限(45分钟 × 2),上课节奏预计较快,有些内容甚至会一带而过,请同学们务必腾出时间来过一遍上述预习章节的内容。

🖥️ 我准备的基于 xaringan包 的 网页版讲义,供同学们参考。

2. 课堂讲义

🖥️ 第7讲 迭代

3. 随堂练习

⌨️ [未安排随堂练习]

4. 课后作业

✍️ 课后作业