R 语言入门实战:第二章 R 包与帮助文档 —— 让 R 能力 “无限扩展”

一、引言:为什么需要 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 次的分布更平滑,更接近理论值;
    • 加权骰子:分布向右偏移(大点数和的频率更高),符合加权预期。

五、第二章核心小结

  1. R 包使用流程install.packages()安装(一次)→library()加载(每次会话)→调用包内函数;
  2. qplot()绘图:快速绘制散点图、直方图,binwidth(直方图柱宽)和I()(强制参数)是常用技巧;
  3. 帮助文档核心?函数名查看详情,重点看Arguments(参数)和Examples(示例);
  4. 加权抽样:用sample(prob = 权重向量)实现,权重长度需和抽样向量一致;
  5. 模拟验证replicate()重复模拟,结合可视化判断结果是否符合预期。

小练习

1.用help(qplot)查看qplotgeom参数,尝试绘制 “掷骰子点数和的密度图”(提示:geom = "density")。

2.尝试根据例子,使用用ggplot() + geom_histogram()绘图

R 语言入门实战:第三章 R 对象 —— 从原子向量到扑克牌数据框

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值