R语言是一种统计分析、图形表示和报告的编程语言,可在多个主流操作系统上运行,已成为新的三大主流统计分析软件之一。本章主要介绍R语言及扩展包的安装、数据管理等应用入门知识。
R语言是由诞生于20世纪70年代贝尔实验室的S统计绘图语言演变而来。1992年新西兰奥克兰大学统计学Ross Ihaka和Robert Gentleman教授为了方便教授统计学课程,基于S语言的源代码,编写了一套能执行S语言的软件,并将该软件的源代码全部公开,即R语言。目前R核心开发小组负责维护此软件。他们将全球优秀的统计应用软件打包提供给用户,用户可以通过网站(http://www.r-project.org)了解有关R的最新信息和使用说明,得到最新版本的R软件和程序包。R软件具备完整的数据处理、计算和作图功能,不依赖于操作系统,可以在Linux、Windows及Mac系统中运行。R软件提供了弹性的、互动的环境来分析数据、可视化展示数据;提供了若干统计程序包,以及多种集成的各种统计及数学计算的函数,高效完成数据的统计分析。随着R语言的不断发展,其提供了一整套数据读入、规整、处理、建模、可视化及形成可重复性报告的功能。
R语言可以自由下载,可选择在国内与自己最近的镜像中下载。如以Windows版本为例,从清华大学的镜像网站https://mirrors.tuna.tsinghua.edu.cn/CRAN/获取最新的版本(至2020年底目前最新版本为R-4.0.3),下载地址为https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/base/R-4.0.3-win.exe。请注意,因R软件大约每3个月升级一次,如果上述直接下载网址的网页不能打开,则说明R已经升级,建议到相关镜像网站下载最新版本的R软件,或者仍可尝试用迅雷等软件下载。下载成功后,双击运行安装软件R-4.0.3-win.exe,通常读者可采用默认安装,也可根据自己的需要设置不同的安装路径。安装成功后,桌面会生成快捷图标。双击则弹出R语言的主窗口,界面如图2-1。
R软件部分统计功能整合在R语言底层,大多数功能以程序包的形式提供,用户可以根据需求安装相应的统计包(package)。R包的安装来源主要有三个,包括:①从R语言官网上直接下载相关R包并安装;②从Bioconductor上下载R包并安装;③从Github上下载R包并安装。常用的有三种安装方式:命令方式、菜单方式及本地加载。以“R2WinBUGS”程序包为例,在已连接网络的情况下,根据提示选择不同的镜像即可(建议选择国内镜像)。安装命令如下:
图2-1 R语言主窗口
安装源自Github(https://github.com/)的R包,需要先安装devtools包,然后用devtools包里的install_github函数来进行安装,具体代码如下:
或者
这里需要注意的是,github中的R包需要在其前面加上该包所在的库名,否则无法进行下载安装。本书强烈建议采用线上方式安装扩展包,这样R可以“自动补全”安装扩展所依赖的其他扩展包。
除R的标准程序包(如base包)外,其他手动安装的新的程序包在使用前需要手动加载,有两种方法:命令方式及菜单方式,仍以“R2WinBUGS”程序包为例,在采用该程序包前需要加载,命令如下:
library命令每次只能加载一个程序包,读者可以安装pacman包,采用如下命令加载多个包:
该命令可同时加载R2WinBUGS、metafor、tidyverse三个程序包。R语言对字母的大小写要求严格,同名字母的大小写为不同的字符,在安装、加载及命令输入时应注意。
RStudio是R的集成开发环境(IDE),是编辑、运行R语言的最为理想的工具之一。官方网站为https://www.rstudio.com/,下载地址为https://download1.rstudio.org/desktop/windows/RStudio-1.3.1093.exe(建议采用迅雷等软件下载)。下载后,双击文件,选择不同的安装路径安装,建议安装路径不包含中文。安装RStudio前,先安装R软件。安装成功,双击运行RStudio,界面如图2-2所示。
图2-2 RStudio运行界面
打开RStudio,会显示出类似于下面的界面,在常规的菜单栏与工具栏之下,主要有4个窗口,分别为:
脚本窗口:用于编辑脚本,如R脚本等(用快捷键Ctrl+Shift+N新建一个脚本)。
命令窗口:用于输入命令。
变量、历史等窗口:有4个标签页,Environment为环境窗口,可简单理解为查看变量的窗口;History为历史窗口,用于查看历史。
文件等窗口:有5个标签页,Files用于查看与管理文件;Plot用于查看输出的绘图;Packages用于管理“包”,“包”的概念会在后面介绍;Help用于查看帮助文档。
在脚本窗口输入命令后,点击窗口右上角的Run或者点击快捷键Ctrl+Enter便可执行命令,执行结果在窗口显示,请读者自行练习。
R中常用的数据类型(type)包括整数(integer)、浮点数(double)、缺失值(NA)、复数(complex)、字符串(character)、逻辑值(logical)、原生型(raw)等。直接输入单个整数,被视为浮点数,如需要其必须为整数型,须在整数后加大写L,如1L。在形如m:n的序列中的元素被直接视为整数型。R中整数用32-bit存储,其范围大致在+/-2e9之内,不存在普通整数型与长整数型(long)之间的区别。单引号或双引号括起来的内容为字符串,对单字符与字符串不进行区分。单引号与双引号没有区别,但需要对应。逻辑值包括TRUE和FALSE。查看对象x的类型,可用函数class()/typeof()/mode(),基本命令格式相同,为:
R中有5种基本数据结构,分别是向量(vector)、矩阵(matrix)、数组(array)、数据框(data frame)和列表(list)。下文简单介绍5种基本数据结构,见图2-3。
图2-3 R中的数据结构
向量:向量中的元素必须是同一种数据类型,采用函数c()进行创建,如:
矩阵:具有维度(dim)属性,是维度为2的向量。创建矩阵的语法为:
其中,data参数指定原始向量的数据,nrow参数指定行数,ncol参数指定列数,默认将原有向量按照纵向排成矩阵。如创建1-12的3×4的矩阵:
数组与矩阵类似,但是维度可以大于2。数组可通过array()函数创建,形式如下:
如创建2×4×3的数组:
数据框由含不同模式(数值型、字符型等)数据的列组成,与SAS、SPSS和Stata中的数据集相类似。数据框可通过函数data.frame()创建:
其中,列向量col1,col2,col3,…可为任何类型(如字符型、数值型或逻辑型)。每一列的名称可由函数names()指定。
列表为R数据结构中最复杂的一种,是一些对象的有序集合。形象地讲可以理解为超市购物篮,可以放不同的物品。比如一个列表中可以是若干个向量、矩阵、数据框,甚至是其他列表的组合。用函数list()创建:
数据的管理主要包括数据的输入、修改及保存。本书不涉及大型数据库的管理,所以将以本书常用的数据管理为主进行阐述。当数据量较少时,可以在R中直接输入。多数情况下,需要从R外部读入数据,有不同的包及函数读入不同格式的数据,例如readr包、haven包、foreign包等。表2-1列出了常见文件格式的读取函数:
表2-1 R读取常见文件格式的包及函数
R语言中对数据处理的包及函数比较多,其中tidyverse包提供了非常优秀的数据清理、整合和可视化的“一站式服务”。Hadley Wickham将自己所写的包整理成了一套数据处理的方法,统一整合到tidyverse包里,包括ggplot2、dplyr、tidyr、readr、purrr、tibble、stringr、forcats。tidyverse包的数据处理流程大致分为以下三类:①数据导入;②数据整理;③数据探索(可视化、统计分析)。
下面以卡介苗预防结核病数据为例,进行演示。首先获得数据,并保存于本地磁盘,再进行数据的读取及转换,数据读取后进行数据的管理。
数据结果如下:
由上述结果可知,新读入的bcg数据为tibble格式,其中author、alloc类型为chr,即字符串变量;其余为dbl,即双精度浮点型变量或实数。tibble是dataframe的升级版,有如下优点:①生成的数据框数据每列可以保持原来的数据格式,不会被强制性改变,如字符串变成因子格式;②查看数据时,在一行内显示;③数据操作速度会更快。可由tibble()函数构建。请注意,write.csv()导出数据会默认增加一列序号,所以read_csv()函数再读入R时会有一个“X1”列。
tidyverse包中的dplyr包数据处理功能强大,主要包括以下函数:①filter():据条件过滤数据;②arrange():根据某一列的数据对行排序;③select():只保留部分列的数据;④mutate():增加新的列;⑤summarise():数据的统计特征;⑥group_by():对数据分组。下面进行简单演示,选取bcg数据中trial、tpos、tneg、cpos、cneg变量,并生成新的变量or值,命令如下:
命令中的%>%为管道函数,可理解为变量的传递函数,管道前数据用于管道后面的函数。管道函数可明显减少中间变量的个数,简化编程。
运行上述命令后,R软件会出现如下结果:
由上述结果可知,mutate()函数产生一个新的变量or,而bcg数据集并没有改变。tidyverse包功能强大,读者可参考帮助文件或 R for Data Science 图书。
众多研究者为R语言提供了丰富的贝叶斯统计推断的扩展包,用于Meta分析的包主要可以分为以下几大类:一类是调用WinBUGS/OpenBUGS、JAGS、Stan、INLA等贝叶斯分析专用软件,其中R2WinBUGS、R2jags、rjags、runjags等扩展包需要用户编程,如编写Meta分析模型BUGS语言代码等;而bnma、Metastan、gemtc、nmaINLA等直接调用相关软件,无须用户编写BUGS语言代码。一类是无须调用贝叶斯分析软件,如bayesmeta包。
对于WinBUGS/OpenBUGS、JAGS、Stan、INLA等软件包及自带帮助手册等建议到官网去下载,如:
https://www.mrc-bsu.cam.ac.uk/software/bugs/the-bugs-project-winbugs/
http://mcmc-jags.sourceforge.net/
https://mc-stan.org/users/interfaces/rstan
https://www.r-inla.org/home
读者可以从R网站Task Views的Topics中寻找更多的扩展包,寻找的主题是Bayesian和Meta-Analysis。常见的、无须用户编写BUGS语言代码的贝叶斯Meta分析包见表2-2。
表2-2 R软件常用Meta分析扩展包
本章使用的R语言主要函数见表2-3。
表2-3 本章使用的主要R语言函数
[1]卡巴科弗.R语言实战[M].高涛,肖楠,陈钢,译.北京:人民邮电出版社,2013.
[2]张天嵩,钟文昭,李博.实用循证医学方法学[M].2版.长沙:中南大学出版社,2014.
[3]WICKHAM H,GROLEMUND G.R for data science:import,tidy,transform,visualize,and model data[M].Sebastopol:O'Reilly Media,2016.