章节摘要:本章的案卷是全球各国历年人均 GDP 与寿命的追踪数据。这份档案天然是"每年一行"的长表,而很多分析需要"每年一列"的宽表——破案主线就是让证据在两种形状之间自由变形,同时把重复的勘验动作沉淀成函数,遇到意外时懂得拦截与排错。
一个具体问题串起全章:想看几个国家寿命随时间的走势,用宽表画图一步到位;想算"每个国家寿命的年均增速",用长表分组汇总最顺手。同一份证据、两种形状、各有最佳用途——tidyr 的 pivot 系列就是变形引擎。而当你发现"对 142 个国家各算一次增速"要重复 142 遍同样的代码时,函数与控制流就该登场了;批量跑起来再遇到报错,错误处理与调试补上最后一块板。
拐点在第 2 节:初学者写循环是"逐行搬运 Excel 思维",而 R 的正路是向量化与"整表思维"——能用一次分组汇总解决的,就不写循环;循环只留给真正需要逐案处理的场景。结论:重塑解决"形状",编程解决"重复",排错解决"意外",三者合起来才是自动化勘验能力。
| 易错点 | 症状 | 处方 |
|---|---|---|
| 1:length 空向量倒序 | 循环反着跑,结果错得莫名 | 一律 seq_along |
| 变形后忘转类型 | year 是字符,x 轴顺序错乱 | names_transform 或 as.integer |
| 函数内改外部表 | 原表纹丝不动 | 只靠返回值传证据 |
| 吞错不清账 | tryCatch 后 NA 混进结果无人知 | 失败名单必须汇总上报 |
本章给档案案配备了三件自动化装备:形状自由(重塑)、动作复用(函数)、意外可控(排错)。落到案情上,产出了一张 142 国寿命增速的完整排序——东亚多国的追赶式增长排在前列,撒哈拉以南多国因公共卫生事件出现断层。更重要的是方法论结论:这类"逐国重复计算"的任务,分组汇总一行链式代码就是最优解;只有当每个案子有独立的前后依赖时,循环加护栏才登场。这套判断力会在第 7 章处理大案卷时再次用到。
档案案产出了一张国家寿命走势对比图——这张图正是下一章的主角。油耗指纹案将系统展开 R 的可视化语法。