一、引言:为什么需要 R 包和帮助文档?
如果说第一章的 “对象和函数” 是 R 的 “基础装备”,那第二章的R 包就是 “扩展装备”——R 社区的开发者已贡献了 2 万 + 包,覆盖数据分析、可视化、机器学习等所有场景;而帮助文档则是 “使用说明书”,能帮我们快速搞懂任何函数的用法。本章通过 “给骰子加权” 的实战,带大家掌握这两个核心技能。
二、R 包:给 R 装上 “插件”
R 包是 “函数、数据、文档” 的集合,比如绘图神器ggplot2、数据处理包dplyr都是最常用的 R 包。使用 R 包的核心流程是:安装→加载→使用。
1. 第一步:安装 R 包(仅需一次)
通过install.packages("包名")从 CRAN 下载安装,国内用户记得先设置国内镜像(如清华、中科大),否则下载很慢:
# 安装ggplot2包(绘图必备)
install.packages("ggplot2") # 首次安装需联网
- 批量安装:同时安装多个包,用向量包裹包名,如
install.packages(c("ggplot2", "dplyr")); - 镜像选择:如果首次安装,R 会提示选择 CRAN 镜像,选 “China (Tsinghua)” 即可。详细安装方式可参考R语言介绍及环境安装与配置
2. 第二步:加载 R 包(每次会话都要!!!)
安装后,需用library(包名)加载包,否则包内的函数无法使用:
# 加载ggplot2包
library(ggplot2) # 无报错则加载成功
- 注意:
library()的包名不用加引号,而install.packages()必须加引号; - 查看已加载包:用
search()查看当前会话加载的所有包。如图: 
3. 第三步:使用 R 包 —— 以qplot()快速绘图为例
ggplot2包中的qplot()(quick plot)能快速绘制图形,比如绘制散点图、直方图:
# 示例1:绘制散点图(x和y是自定义向量)
x <- c(-1, -0.8, -0.6, 0, 0.6, 0.8, 1)
y <- x ^ 3 # y是x的三次方
qplot(x = x, y = y, color = I("blue"), size = I(3)) # 蓝色散点,大小3

# 示例2:绘制直方图(用掷骰子的结果)使用第一章中的roll_two()
set.seed(123)
rolls <- replicate(10000, roll_two()) # 重复掷骰子10000次
qplot(x = rolls, binwidth = 1, fill = I("lightcoral")) # 直方图,柱宽1,填充珊瑚色

- 这幅筛子的投掷结果显示它们应该是均匀筛子,点数和为7 的频率要高于其他点数和,并且点数和出现的频率与构成它们的点数组合个数成正比,从中间向两侧递减
I()函数:用于 “强制保留” 参数值(如color = I("blue")表示直接用蓝色,而非映射数据);binwidth:直方图的柱宽,需根据数据范围调整(如掷骰子点数和为 2-12,binwidth=1合适)。- 可以思考一下如何在筛子上动些手脚,让模拟结果有些偏差呢?答案就在下面。
三、帮助文档:解决问题的 “万能钥匙”
R 的每个函数、包、数据集都有官方帮助文档,遇到不懂的函数时,不用百度也能快速上手。
1. 查看帮助文档的 3 种方式
| 方法 | 作用 | 示例 |
|---|---|---|
?函数名 | 查看特定函数的帮助文档 | ?sample 查看抽样函数用法 |
args(函数名) | 快速查看函数的参数列表 | args(qplot) 查看绘图参数 |
??关键词 | 模糊搜索相关帮助文档 | ??plot 搜索所有绘图相关函数 |
2. 帮助文档的核心结构(以?sample为例)
打开?sample后,帮助文档分为以下关键部分,新手重点看前 4 个:
- Description:函数功能描述(如 “从向量 x 中随机抽样”);
- Usage:函数的调用格式(如
sample(x, size, replace = FALSE, prob = NULL)); - Arguments:参数说明(重点看
prob参数:“抽样权重向量”); - Examples:可运行的示例代码(最实用!复制粘贴就能测试);
- Details:进阶说明(如抽样算法、注意事项)。
3. 实战:用帮助文档解决 “加权骰子” 问题
需求:让骰子的 “6 点” 出现概率为 3/8,1-5 点各为 1/8(默认是 1/6)。通过?sample发现prob参数可设置抽样权重,具体实现如下:
# 定义“加权骰子”函数
roll_weighted <- function() {
die <- 1:6
# 设置权重:1-5点各1/8,6点3/8
weights <- c(1/8, 1/8, 1/8, 1/8, 1/8, 3/8)
# 抽样时指定prob参数
dice <- sample(die, size = 2, replace = TRUE, prob = weights)
sum(dice)
}
# 验证:重复掷10000次,看结果分布
set.seed(123)
weighted_rolls <- replicate(10000, roll_weighted())
qplot(x = weighted_rolls, binwidth = 1, fill = I("lightblue"))

- 结果特点:加权后,点数和为 “7-12” 的频率明显高于均匀骰子(因为 6 点出现概率更高);
- 小技巧:
prob向量的长度必须和x一致(这里die是 6 个元素,weights也是 6 个)。
四、实战:验证骰子的 “均匀性” 与 “加权效果”
结合 R 包和帮助文档,我们可以通过 “重复模拟 + 可视化” 验证骰子是否符合预期。
1. 步骤 1:重复模拟生成数据
用replicate(n, 函数)重复运行函数n次,生成大量数据(样本量越大,结果越可靠):
# 生成3组数据:均匀骰子1000次、均匀骰子10000次、加权骰子10000次
set.seed(123) # 固定随机种子,结果可复现
rolls_1k <- replicate(1000, roll_two()) # 均匀骰子1k次
rolls_10k <- replicate(10000, roll_two()) # 均匀骰子10k次
rolls_weighted_10k <- replicate(10000, roll_weighted()) # 加权骰子10k次
2. 步骤 2:用直方图可视化分布
# 绘制3个直方图对比(用qplot的多面板功能)
library(gridExtra) # 需先安装:install.packages("gridExtra")
# 图1:均匀骰子1k次
p1 <- qplot(rolls_1k, binwidth = 1, fill = I("lightcoral")) +
labs(title = "均匀骰子(1000次)", x = "点数和", y = "频率") +
theme_minimal()
# 图2:均匀骰子10k次
p2 <- qplot(rolls_10k, binwidth = 1, fill = I("lightgreen")) +
labs(title = "均匀骰子(10000次)", x = "点数和", y = "频率") +
theme_minimal()
# 图3:加权骰子10k次
p3 <- qplot(rolls_weighted_10k, binwidth = 1, fill = I("lightblue")) +
labs(title = "加权骰子(10000次)", x = "点数和", y = "频率") +
theme_minimal()
# 组合3个图
grid.arrange(p1, p2, p3, ncol = 1)

- 注意
- 使用qplot()生成图形时,可能报出警告提示如下,不必理会,可以再次运行即可。
-
警告信息: `qplot()` was deprecated in ggplot2 3.4.0. This warning is displayed once every 8 hours. Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated. - 因为书中的例子有点落后,其实qplot()函数已被官方标记为 “弃用(deprecated)” ,它虽然暂时还能运行,但开发者不再推荐使用,未来版本可能会被彻底移除,建议迁移到更灵活的ggplot()语法。例如:
-
# 假设rolls_1k已存在(示例:生成模拟数据) set.seed(123) roll_two <- function() sum(sample(1:6, 2, replace = TRUE)) # 模拟掷两个骰子 rolls_1k <- replicate(1000, roll_two()) # 重复1000次 # 转为数据框(列名设为"rolls",方便后续映射) df_rolls_1k <- data.frame(rolls = rolls_1k) library(ggplot2) p1 <- ggplot(data = df_rolls_1k, aes(x = rolls)) + geom_histogram( binwidth = 1, # 组距(每个柱子代表1个点数和区间) fill = "lightcoral", # 柱子填充色 color = "black" # 柱子边框色(让柱子更清晰) ) + labs( title = "均匀骰子(1000次)", x = "点数和", y = "频率" ) + theme_minimal() # 简洁主题 # 显示图形 print(p1)
- 结论:
- 均匀骰子:点数和为 “7” 的频率最高(符合概率分布,因为 7 的组合最多:1+6、2+5 等);
- 样本量影响:10k 次比 1k 次的分布更平滑,更接近理论值;
- 加权骰子:分布向右偏移(大点数和的频率更高),符合加权预期。
五、第二章核心小结
- R 包使用流程:
install.packages()安装(一次)→library()加载(每次会话)→调用包内函数; qplot()绘图:快速绘制散点图、直方图,binwidth(直方图柱宽)和I()(强制参数)是常用技巧;- 帮助文档核心:
?函数名查看详情,重点看Arguments(参数)和Examples(示例); - 加权抽样:用
sample(prob = 权重向量)实现,权重长度需和抽样向量一致; - 模拟验证:
replicate()重复模拟,结合可视化判断结果是否符合预期。
小练习:
1.用help(qplot)查看qplot的geom参数,尝试绘制 “掷骰子点数和的密度图”(提示:geom = "density")。
2.尝试根据例子,使用用ggplot() + geom_histogram()绘图

4215

被折叠的 条评论
为什么被折叠?



