R 文档
简洁、以示例为主的 R 参考文档。先读概念,再看代码,然后在 Coddy 学习旅程中动手练习。
入门
- R 是什么?R 编程语言是什么、从哪里来、用来做什么,以及和 Python 相比如何,还附带第一段可以运行的 R 代码。
- 安装 R如何从 CRAN 下载 R 并安装到 Windows、macOS 或 Linux 上,以及几乎人人都用来写 R 的 IDE:RStudio。
- 运行 R 脚本运行 R 代码的所有方式:交互式控制台、命令行中的 Rscript、R 内部的 source(),以及 RStudio 中的 Run 和 Source 命令。
- R 语法R 语法的核心:用 <- 赋值,表达式与自动打印,带具名参数的函数调用,以及“一切皆向量”的规则。
- 注释R 中的注释怎么写:# 符号,为什么 R 没有真正的多行注释,RStudio 中注释掉代码块的快捷键,以及好的注释应该写什么。
变量与数据
- 变量如何在 R 中用 <- 箭头创建变量,什么时候必须改用 =,命名规则,以及如何用 ls() 和 rm() 列出和删除变量。
- 数据类型R 的基本数据类型 double、integer、character、logical,typeof() 和 class() 有什么不同,以及类型转换和强制转换是怎么进行的。
- 数字在 R 中处理数字:numeric 与 integer 的区别、取整函数家族、sqrt 和 log、取模运算符 %%,以及特殊值 Inf 和 NaN。
- 字符串在 R 中处理文本所需的一切:创建字符串,用 paste 和 paste0 拼接,用 sprintf 格式化,用 gsub、grepl 和 strsplit 查找与拆分。
- 输入与输出R 语言的输出机制:自动打印、print() 与 cat() 的区别、message(),以及如何用 readline() 和 readLines() 读取用户输入。
流程控制
- 运算符R 中你需要的所有运算符:包括 %% 和 %/% 在内的算术运算符、向量化的比较运算、& 与 && 的区别,以及用于成员检测的 %in%。
- If / ElseR 语言中的条件逻辑:if/else if/else 语法、让脚本出错的花括号陷阱、作用于整个向量的向量化 ifelse(),以及处理多分支选择的 switch()。
- for 循环R 中 for 循环的工作方式:遍历向量和索引,收集结果时避开向量增长的陷阱,next 和 break,以及什么时候向量化调用比循环更好。
- while 循环R 中的 while 循环如何工作:先判断条件再循环,用 repeat 加 break 实现 R 的 do-while,next 的用法,以及避免死循环的好习惯。
数据结构
- 向量向量是 R 的基本单位,就连单个数字也是向量。学习如何用 c() 创建向量、索引向量(从 1 开始!)、用逻辑掩码筛选,以及一次对整个向量做运算。
- 列表列表是 R 中什么都能装的容器:混合类型、嵌套结构、整个数据框。关键在于分清 [ 什么时候返回一个更小的列表,[[ 什么时候返回元素本身。
- 矩阵如何用 matrix()、cbind() 和 rbind() 构造矩阵,按行和列索引,并分清逐元素相乘的 * 与真正的矩阵乘法 %*%。
- 因子因子是 R 存储分类数据的方式:带着文本标签的整数编码。本文讲怎么创建因子、给它排序、设置参照水平,以及怎么避开因子转数值的陷阱。
- 数据框数据框就是 R 里的电子表格:一组等长的具名列,每列有自己的类型。本文讲怎么创建数据框,怎么用 str() 和 head() 快速了解它,以及怎么取出列、行和单元格。
- 缺失值(NA)NA 表示“未知”,而且它会扩散到它接触的每一次计算中。如何用 is.na() 检测它,用 na.rm = TRUE 跳过它,以及有意识地删除或替换它。
函数与包
- 函数如何在 R 中创建函数:function(x) { } 语法、返回值、默认参数和具名参数、... 点参数、匿名函数,以及作用域是怎么工作的。
- apply 函数族apply 函数族(apply、lapply、sapply、vapply、mapply 和 tapply)会对数据中的每个元素运行同一个函数。本文讲清每个函数的作用,以及什么时候该用哪个。
- 管道%>% 是什么意思,基础 R 的原生管道 |> 怎么用,两者各自的规则和占位符,以及新代码该用哪一个。
- 包R 包是怎么工作的:用 install.packages() 从 CRAN 安装,用 library() 加载,require() 和 library() 的区别,pkg::fun(),以及值得了解的常用包。
- 工作目录R 在哪里查找文件,以及如何控制它:getwd()、setwd()、list.files(),用 rm(list = ls()) 清空环境,以及为什么自动保存 .RData 是个陷阱。
数据整理
- dplyrdplyr 是什么、怎么安装,以及它的六个核心动词加上管道,如何把杂乱的数据框代码变成可读的流水线。
- 筛选与子集保留你想要的行和列的所有方法:方括号加逻辑掩码、一行搞定的 subset()、%in%、NA 陷阱,以及 dplyr 的 filter() 和 select()。
- 添加列(mutate)如何添加、转换和删除数据框的列:df$new <- ...、用 ifelse() 创建条件列、transform(),以及 dplyr 的 mutate() 与 case_when()。
- 重命名列在 R 中重命名数据框的列:names() 和 colnames(),按位置与按名字重命名,setNames(),dplyr 的 rename(),以及清理导入数据中杂乱的表头。
- 排序R 中的排序到底是怎么回事:向量用 sort(),为什么数据框需要 order() 的索引技巧,降序和多列排序,以及 dplyr 的 arrange()。
- 分组汇总在 R 中计算分组统计量的所有方法:用 table() 计数,用 tapply() 求每组的一个统计量,aggregate() 的公式接口,以及 dplyr 的 group_by() 加 summarize()。
- 合并与连接按共同的键合并数据框:用 merge() 做内连接、左连接、右连接和全连接,用 by.x/by.y 处理不同的键名,dplyr 的连接函数族,以及用 rbind() 堆叠行。
- 数据透视(重塑)宽格式和长格式数据的区别,以及如何相互转换:tidyr 的 pivot_longer() 和 pivot_wider()、旧的 spread/gather,以及基础 R 的 reshape()。
导入与导出
- 读取 CSV如何用 read.csv() 把 CSV 文件导入 R:真正重要的几个参数,导致大多数失败的工作目录陷阱,以及什么时候值得用 readr::read_csv。
- 读取 ExcelR 本身打不开 .xlsx 文件,readxl 包填补了这个空缺。如何读取工作表、单元格区域和表头,如何把数据写回 Excel,以及如何避开导入 Excel 时的经典陷阱。
- 写入 CSV 和 RDS从 R 导出数据:write.csv 搭配 row.names = FALSE(每次都要加),write.table 处理其他分隔符,saveRDS 保存后再读回时类型不会丢失。
- 日期R 的 Date 类其实是换了身装扮的天数。本文讲怎么用 as.Date 解析字符串、格式化日期输出、日期相减、生成日期序列,以及什么时候该改用 POSIXct。
图表
- plot()R 的 plot() 函数怎么用:图形类型、标题和坐标轴标签、颜色、点的符号(pch)、用 lines() 和 abline() 叠加图层,以及图例。
- 直方图如何在 R 中用 hist() 绘制直方图:选择 breaks、设置柱子样式、切换到密度刻度、叠加正态曲线,以及 ggplot2 的写法。
- 箱线图如何在 R 中用 boxplot() 画箱线图:读懂箱体和须线,用公式接口比较各组,调整样式,以及找出图背后的数字。
- 散点图如何在 R 中画散点图:用 plot() 画出两个变量,用 abline(lm()) 添加回归线,用 lowess() 画平滑曲线,以及用 pairs() 生成散点图矩阵。
- 条形图如何在 R 中用 barplot() 画条形图:从命名向量或 table() 出发,用矩阵画分组和堆叠条形图,调整样式,以及 geom_col 与 geom_bar 的区别。
- ggplot2ggplot2 的工作原理:数据 + aes() + geom 的思维模型,映射与设定美学属性的区别,labs()、facet_wrap()、主题,以及用 ggsave() 保存图形。
统计
- 描述性统计如何在 R 中汇总数据:mean()、median()、sd()、var()、summary()、quantile(),每个函数算的是什么,sd() 背后 n−1 的细节,以及为什么 R 的 mode() 是个陷阱。
- 相关分析用 cor() 衡量两个变量如何一起变化,用 cor.test() 检验这种关系是否真实存在,再用相关矩阵一次性查看多个变量。
- t 检验用 t.test() 做单样本、双样本和配对 t 检验,更重要的是读懂输出的每一行:t 值、自由度、p 值和置信区间。
- 方差分析用 aov() 比较三组或更多组的均值,逐格读懂 ANOVA 表,再用 TukeyHSD() 找出究竟是哪几组不同。
- 线性回归用 lm() 拟合回归,读懂 summary() 的每一部分(系数、标准误、p 值、R 方、F 统计量),再用 predict() 做预测。
- 逻辑回归用 glm(family = binomial) 为是/否结果建模:读懂 summary,用 exp() 把对数优势系数转换成优势比,并以正确的方式得到预测概率。
- 置信区间为均值、比例和模型系数求置信区间:t.test()、prop.test()、confint(),以及“95% 置信”到底是什么意思,样本量又如何决定区间宽度。
- 随机数用 rnorm()、runif()、rbinom() 和 sample() 生成随机数据,用 set.seed() 让结果可复现,并看懂 R 中分布函数的 d/p/q/r 命名规则。