第二章 R包与帮助文档
说明:所有推文中一个
#
的含义是对这段代码的注释说明,两个##
的含义是运行代码后的结果。
前言:上一章我们已经有了模拟掷一对骰子的函数,现在我们要对这对骰子加权,使出大点数的概率大于小点数的概率,这样就可以作弊了。加权前我们需要确保骰子原本是均匀的。两个工具可帮助我们:重复(repetition)和可视化(visualization)。这就需要我们调用
replicate
函数来重复掷骰子,qplot
函数将重复投掷的结果可视化。
2.1 R包
1、 qplot
来自于ggplot2
包,所以使用前需安装ggplot2
。输入以下命令安装并加载ggplot2
if(!require('ggplot2')) install.packages('ggplot2')
library('ggplot2')
# 如果想查看qplot的源代码,你可以直接输入qplot然后运行。(源代码很长。。。。)
2、 下面我们了解下qplot
,其含义是:quick plot(快速绘图)。
# 分别生成两组向量
x <- c(-1, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1)
x
## -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0
y <- x ^ 3
y
## -1.000 -0.512 -0.216 -0.064 -0.008 0.000 0.008 0.064 0.216 0.512 1.000
qplot(x, y)
可以看出来qplot
生成的散点图可以直观描述两个变量之间的关系。接下来我们将介绍直方图(histogram)可以很好的可视化单一变量的分布情况。
x <- c(1, 2, 2, 2, 3, 3)
qplot(x)
至此我们虽然可以看出趋势,但图形非常不好看所以我们要加一个参数binwidth
(这个表示二进制宽度)可以调整柱子的宽度,我们将柱子宽度设置为1,可以看到画出的图更好看啦~
x <- c(1, 2, 2, 2, 3, 3)
qplot(x, binwidth = 1)
3、练习题:
x3 <- c(0, 1, 1, 2, 2, 2, 3, 3, 4)
qplot(x3, binwidth = 1)
4、重新回到骰子的问题,我们通过直方图可以知道,高的柱子对应的数值出现的频率高于低的柱子。下面我们来画下正常掷一对骰子所对应的直方图
# 我们需要用到replicate函数和qplot函数,以及上一篇推文中自定义好的函数roll(),我们假定掷了10000次
# 第一步定义函数roll()
roll <- function(){
die <- 1:6
dice <- sample(die, size = 2, replace = TRUE)
sum(dice)
}
# 重复掷骰子10000次,并把赋值给一个变量rolls,一个新函数不会用时可以查看其帮助文档用?replicate,即可查看replicate的帮助文档。
rolls <- replicate(10000, roll())
# qplot绘图,为什么要加参数xlim大家可以查看下qplot的帮助文档:?qplot
qplot(rolls, xlim = c(1,13), binwidth = 1)
通过直方图我们可以发现点数和为7出现的概率最高因为,每个点数和与构成他们的点数组合数成正比
下面我们提高6的出现频率,让非6点数变为1/8,6变为3/8。
点数 | 均匀概率 | 加权概率 |
---|---|---|
1 | 1/6 | 1/8 |
2 | 1/6 | 1/8 |
3 | 1/6 | 1/8 |
4 | 1/6 | 1/8 |
5 | 1/6 | 1/8 |
6 | 1/6 | 3/8 |
sample
函数可以帮助我们做到,使用?sample
查看函数的帮助文档,我们可以发现sample()
的参数sample(x, size, replace = FALSE, prob = NULL)
仔细看prob
参数的含义即可发现它是一个与欲抽样的向量等长的向量,其元素对应被抽样元素的抽样权重,下面我们修改roll()
函数
roll <- function(){
die <- 1:6
dice <- sample(die, size = 2, replace = TRUE,
prob = c(0.125, 0.125, 0.125, 0.125, 0.125, 0.375))
sum(dice)
}
rolls <- replicate(10000, roll())
qplot(rolls, xlim = c(1,13), binwidth = 1)
至此作弊成功啦~,大点数组合出现的概率远高于小点数出现频率。(以游戏的形式来学习R语言,强烈把这本书推荐给大家R语言入门与实践)
2.2 总结
?函数名
可以查看该函数的帮助文档,太高深的帮助文档看不懂的话,就运行下帮助文档最下方给的Examples
(示例代码)并尝试修改其中参数的值,观察有什么变化来帮助自己理解。