在医学统计学或者流行病学里的现场调查、样本选择经常会提到一个词:随机抽样。随机抽样是为了保证各比较组之间均衡性的一个很重要的方法。那么今天介绍的第一个函数就是用于抽样的函数sample:

> x=1:10
> sample(x=x)[1]  3  5  9  6 10  7  2  1  8  4

第一行代码表示给x向量赋值1~10,第二行代码表示对x向量进行随机抽样。结果输出为每次抽样抽得的结果,可以看出该抽样为无放回抽样——最多抽n次,n为x向量中元素的个数。

如果想指定在该向量中抽取元素的个数,需要加一个参数size:

> x=1:1000
> sample(x=x,size=20)[1]  66 891 606 924 871 374 879 573 284 305 914 792 398 497 721 897 324 437
[19] 901  33

这是在1~1000的正整数中抽样,其中size指定抽样的次数,抽了20次,结果如上所示。

这些都是无放回抽样。所谓无放回抽样,也就是说某个元素一旦被选择,该总体中就不会再有该元素。如果是有放回抽样,则需添加一个参数repalce=T:

> x=1:10
> sample(x=x,size=5,replace=T)[1] 4 7 2 4 8

“replace”就是重复的意思。即可以重复对元素进行抽样,也就是所谓的有放回抽样。我们看上面的结果,元素4在5次随机抽样的过程中被抽取了两次。

R语言代码有一个特性就是“对位性”,也许我的词不专业,但是它的意思就是:如果我们输入代码的位置与某个函数中参数的位置一一对应的话,我们可以不写该函数的参数,如:

> x=1:10
> sample(x,20,T)[1] 1 2 2 1 5 5 5 9 9 5 2 9 8 3 4 8 8 8 1 1

在上述代码中我们省略了参数x,size和repalce,但是仍然可以运算并且表示对x向量有放回随机抽取20次。我们之所以尽量在每次编写代码时带上参数是因为我觉得这个习惯比较好,而且看起来清楚明白。另外,省略参数的前提是你非常熟悉某个函数参数的位置,否则一旦没有“对位”,那么结果肯定是错误的。而且很多函数有较多的参数,想记住它们的位置是困难的。而如果带上参数,那么即使位置不对应,也一样可以运算:

> x=1:10
> sample(size=20,replace=T,x=x)[1]  4  9  2  6  4  5  4  7 10  5  2  2  3  4  2  4  6  8  7  8

这种优点显而易见,不仅清楚,而且无需对应。另外我们也可以看出,有放回抽样的话size可以无穷大,而无放回抽样size的大小就取决于总体的容量了。

对于掷骰子,投硬币(这可能是介绍抽样必介绍的内容),都属于有放回抽样。

这里要说明,对于sample函数,参数x可以是数值,也可以是字符,实际上参数x代表任意一个向量:

> a=c("A","B")
> sample(x=a,size=10,replace=T)[1] "B" "A" "A" "A" "B" "A" "A" "B" "A" "A"

上述代码可以理解为掷硬币,抛了10次,其中正面(A)与反面(B)出现的次数。

上述抽样过程,每一个元素被抽取的概率相等,称为随机抽样。

有时候我们的抽取元素的概率未必相等(如常见的二项分布概率问题),此时我们需要添加一个参数prob,也就是“probability”(概率)的缩写。假设一名医生给患者做某手术成功的概率是80%,那么现在他给20例病人做手术,可能有哪几次是成功的呢?代码如下:

> x=c("S","F")
> sample(x,size=20,replace=T,prob=c(0.8,0.2))[1] "F" "S" "S" "S" "S" "S" "S" "S" "S" "S" "S" "S" "F" "S" "S" "F" "S" "S"
[19] "F" "S"

其中“S”代表成功,“F”代表失败。

> x=c(1,3,5,7)
> sample(x,size=20,replace=T,prob=c(0.1,0.2,0.3,0.9))[1] 3 5 7 3 7 3 7 5 3 7 7 7 1 5 7 5 7 7 3 7

这些代码告诉我们,对每一个元素都可以给定一个概率,且每个概率是独立的,即在参数prob中,不一定所有元素的概率加起来等于1,它只代表某元素被抽取的概率而已。

对于sample函数,其参数x可以是R中任意一个对象(如上述对字符的抽样)。其中还有一个功能相同的函数sample.int,“int”即“intger”的缩写,也就是“整数”。它的参数n必须是正整数:

> x=-10.5:7.5
> sample(x=x,size=3);sample.int(n=x,size=3)[1] -5.5 -7.5  0.5
Error in sample.int(x, size = 3) : invalid first argument

第一行代码生成了-10.5到7.5的等差数列,结果输出的第一行是sample的结果;第二行是sample.int的结果,提示错误:“第一个自变量无效”,因为它不是正整数。其余的用法与sample是一样的。

R语言笔记-sample()函数相关推荐

  1. R开发(part8)--应用R语言中的函数环境空间

    学习笔记,仅供参考,有错必纠 文章目录 R开发 应用R语言中的函数环境空间 R语言的函数环境空间 封闭环境 绑定环境 运行环境 调用环境 函数环境空间图示 R开发 应用R语言中的函数环境空间 R语言的 ...

  2. R语言笔记1:t检验和Wilcoxon检验

    转自新浪博客,转载地址:http://blog.sina.com.cn/s/blog_427c24ae0102wg7n.html 1.t检验 数据是高血压患者治疗前后舒张压的变化,这个内容最熟悉不过了 ...

  3. 「杂谈」如何写好R语言apply家族函数

    感觉好久没发有关R语言的博客了.这一年来,我着手开发了两个R包,但基本没怎么发博客. 原因也很简单,可能是我个人的私心吧,或者说是典型的"理论研究者"的"通病" ...

  4. R语言使用basename函数获取数据链接地址中的文件名称(removes all of the path up to and including the last path separator )

    R语言使用basename函数获取数据链接地址中的文件名称(removes all of the path up to and including the last path separator (i ...

  5. R语言使用unzip函数解压压缩文件(Extract or List Zip Archives)

    R语言使用unzip函数解压压缩文件(Extract or List Zip Archives) 目录 R语言使用unzip函数解压压缩文件(Extract or List Zip Archives) ...

  6. R语言使用across函数一次性将多个数据列进行离散化(categorize):或者pivot_longer函数转化为长表、对转化为长表的数值数据列进行离散化、pivot_wider将数据转化为宽表

    R语言使用across函数一次性将多个数据列进行离散化(categorize):或者pivot_longer函数转化为长表.对转化为长表的数值数据列进行离散化.pivot_wider将数据转化为宽表 ...

  7. R语言使用aov函数进行双因素方差分析(Two-way factorial ANOVA)、使用HH包中的interaction2wt函数为任何阶的双因素方差分析可视化主效应和交互作用图、箱图显示主效应

    R语言使用aov函数进行双因素方差分析(Two-way factorial ANOVA).使用HH包中的interaction2wt函数为任何阶的双因素方差分析可视化主效应和交互作用图(Main ef ...

  8. R语言使用trimws函数:trimws函数去除(删除、remove)字符串头尾的空格

    R语言使用trimws函数:trimws函数去除(删除.remove)字符串头尾的空格 目录 R语言使用trimws函数:trimws函数去除(删除.remove)字符串头尾的空格

  9. R语言使用integrate函数进行函数积分计算实战

    R语言使用integrate函数进行函数积分计算实战 目录 R语言使用integrate函数进行函数积分计算实战 #自定义函数 #积分操作

最新文章

  1. java越权发送邮件_水平越权的常见解决方法
  2. SharePoint Framework 构建你的第一个web部件(三)
  3. html-网页基本信息
  4. 聚类算法的缺点_常用聚类算法
  5. c 读取url中的html文本,如何使用Guzzlehttp获取给定url的html内容
  6. 电商培训有用是有前置条件的
  7. 远程连接工具Putty 相关
  8. JXLS (excel报表生成/导出工具)的配置与使用
  9. 网页导出pdf不完整_偶尔偷个懒吧:3种pdf文献全文一键翻译的方法
  10. 一文搞懂 | Linux 同步管理(上)
  11. SAP 采购定价日期控制
  12. 通过无线AP轻松突破内网准入控制
  13. IOL2020中国初选第一题题解
  14. OCR 文字特征提取
  15. Django开源项目
  16. Python数据分析与机器学习实战<九>titanic数据集分析实例
  17. 19杭电计算机考研科目,2019杭电计算机考研初试科目、参考书目、报录比汇总
  18. python 圆形检测_python下用OpenCV的圆形检测
  19. php文件包含漏洞利用
  20. 公司项目重构-Web安全-认证和会话管理

热门文章

  1. spring boot实战(第六篇)加载application资源文件源码分析
  2. 第九届蓝桥杯java B组—第三题复数幂(详细介绍)
  3. android编程获取网络和wifi状态及调用网络设置界面,Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面 - Android平台开发技术 - 博客园...
  4. 计算器显示代码java_java编写的计算器源代码
  5. nginx怎么轮询两台php,Nginx 配置轮询分流-实现负载均衡【测试通过】
  6. 机房精密空调压缩机故障处理实例
  7. 数据中心供配电系统负荷计算实例分析
  8. easypoi教程_SpringBoot图文教程17—上手就会 RestTemplate 使用指南
  9. 成功解决Could not import the PyAudio C module ‘_portaudio‘.
  10. DL之yolov3:使用yolov3算法时需要对Ubuntu系统进行配置的简介、过程步骤之详细攻略