R语言介绍

包括:R的参考资料、R扩展软件包的安装与管理、基本R软件的用法、RStudio软件。

参考自https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/

一些基础信息

推荐参考书

  • Hadley Wickham and Garrett Grolemund(2017) “R for Data Science”,https://r4ds.had.co.nz/, O’Reilly, 讲基本的数据整理、汇总。
  • Hadley Wickham(2019) “Advanced R,” 2nd ed., https://adv-r.hadley.nz/, Chapman & Hall/CRC The R Series,高级R编程,属于对R高级编程技术的讲解。
  • Hadley Wickham(2016) ggplot2 Elegant Graphics for Data Analysis, 2nd ed., https://ggplot2-book.org/, Springer,优雅易用的R作图功能。
  • Susan Holmes, Wolfgang Huber(2020) Modern Statistics for Modern Biology, https://www.huber.embl.de/msmb/index.html, R的统计功能在生物学中的应用

其它参考书

  • R网站上的初学者手册“An Introduction to R”和其它技术手册。
  • John M. Chambers(2008), “Software for Data Analysis-Programming with R,” Springer.
  • Venables, W. N. & Ripley, B. D.(2002) “Modern Applied Statistics with S,” Springer
  • R.L. Kabacoff(2012)《R语言实战》,人民邮电出版社。
  • 薛毅、陈立萍(2007)《统计建模与R软件》,清华大学出版社。
  • 汤银才(2008),《R语言与统计分析》,高等教育出版社。
  • 李东风(2006)《统计软件教程》,人民邮电出版社。

R扩展软件包的安装与管理

安装

R有一万多个扩展软件包,提供了各种各样的功能。 以安装sos包为例。sos包用来搜索某些函数的帮助文档。 在RStudio中调用用“Tools”菜单的“Install Packages”,输入或者在列表中选中sos就可以安装该扩展包。

还可以用如下程序指定镜像网站(例子中是位于清华大学的镜像网站)并安装指定的扩展包:

1
2
options(repos=c(CRAN="https://mirror.tuna.tsinghua.edu.cn/CRAN/"))
install.packages("sos")

还可以用如下程序指定镜像网站(例子中是位于清华大学的镜像网站)并安装指定的扩展包:

1
2
options(repos=c(CRAN="https://mirror.tuna.tsinghua.edu.cn/CRAN/"))
install.packages("sos")

还可以选择扩展包的安装路径,如果权限允许,可以选择安装在R软件的主目录内或者用户自己的私有目录位置。 由于用户的对子目录的读写权限问题,有时不允许一般用户安装扩展包到R的主目录中。 用.libPaths()查看允许的扩展包安装位置,在install.packages()中用lib=指定安装位置:

1
2
3
print(.libPaths())
# [1] "D:/R/R-4.1.0/library"
install.packages("sos", lib=.libPaths()[1])

Github和BioConductor的扩展包

还有一些扩展包没有在CRAN系统提供,而是放在了Github网站。对于这样的包,安装方法举例如下:

1
2
if(!require(devtools)) install.packages('devtools')
devtools::install_github("kjhealy/socviz")

其中kjhealy是Github网站的某个作者的名称,socviz是该作者名下的一个R扩展包。

还有一些包需要从Bioconductor网站安装,可利用镜像网站。利用清华大学镜像的示例如下:

1
2
3
4
5
6
7
options(repos=c(CRAN="https://mirror.tuna.tsinghua.edu.cn/CRAN/"))
if (!requireNamespace("BiocManager", quietly = TRUE)){
install.packages("BiocManager")
BiocManager::install()
}
options(BioC_mirror="https://mirrors.tuna.tsinghua.edu.cn/bioconductor")
BiocManager::install(c("Biostrings"))

随后安装Bioconductor的其它包,也应该先设置repos和Bioc_mirror选项。

更新扩展包

在RStudio中用“Tools–Check for Package Updates”菜单,可以显示有新版本的扩展包,并选择进行更新。

或者在命令行用如下命令更新本地安装的所有有新版本的CRAN扩展包:

1
2
options(repos=c(CRAN="http://mirror.tuna.tsinghua.edu.cn/CRAN/"))
update.packages(checkBuilt=TRUE, ask=FALSE)

RStudio在运行时会载入某些包,如rlang,这使得RStudio无法更新这些包,需要在R的命令行程序(就是基本R软件)中更新。

迁移扩展包

在每一次R软件更新后,需要重新安装原来的软件包,这个过程很麻烦。如果仅仅是小的版本更新,比如从3.5.1变成3.5.2,或者从3.4.2变成3.5.0,可以在安装新版本后,临时将新版本的library子目录更名为library0,将老版本的library子目录剪切为新版本的library子目录,然后将library0中所有内容复制并覆盖进入library子目录,删除library0即可。然后在基本R中(不要用RStudio)运行如下命令以更新有新版本的包:

1
2
options(repos=c(CRAN="http://mirror.tuna.tsinghua.edu.cn/CRAN/"))
update.packages(checkBuilt=TRUE, ask=FALSE)

如果版本改变比较大,可以用如下方法批量地重新安装原有的软件包。首先,在更新R软件前,在原来的R中运行:

1
2
packages <- .packages(TRUE)
dump("packages", file="packages-20180704.R")

这样可以获得要安装的软件包的列表。在更新R软件后,运行如下程序:

1
2
3
options(repos=c(CRAN="http://mirror.tuna.tsinghua.edu.cn/CRAN/"))
source("packages-20180704.R")
install.packages(packages)

安装时如果提问是否安装需要编译的源代码包,最好选择否,因为安装源代码包速度很慢还有可能失败。

项目私有扩展包目录

在使用了R一段较长时间以后,会安装了许多扩展包,这些扩展包在某个时期是有用的,但是一旦某个任务完成了就不再有用。但是,用户自己无法判断哪些包已经不需要。

R的renv扩展包支持每个项目保存私有的扩展包目录,这样,不同的项目使用不同的扩展包集合,不至于引发版本冲突,也不必总是为公用的R扩展包目录增加许多仅是短暂使用的扩展包。用renv管理项目私有扩展包目录,也有利于将项目迁移到其它电脑中,并且保证每次使用的扩展包版本号不变,避免多个项目共用的扩展包升级造成兼容性问题。

那些不需要安装许多扩展包的项目仍可以不启用renv,使用公用的R扩展包目录。

在生成新的RStudio项目时,可以点击选中“Use renv with this project”复选框; 对已有的RStdio项目,如果要启用renv,可以选菜单“Tools – Project Options – Environment”,选中“Use renv with this project”复选框。

启用了renv的项目,在安装新的扩展包时,将安装在项目目录中,而不再修改R的公用的扩展包目录。这也有助于将项目迁移到其它计算机上。

R软件用法

基本运行

如果某个文件如myprog.R在当前工作目录中,保存的都是R程序,称这样的文件为源程序文件。可以在命令行用如下命令运行其中的程序:

1
source("myprog.R")

如果有中文可能要

1
source("myprog.R", encoding="UTF-8")

项目目录

用R进行数据分析,不同的分析问题需要放在不同的文件夹中。

在命令行运行如下命令可以显示当前工作目录位置:

1
getwd()

RStudio

RStudio软件是R软件的应用界面与增强系统,可以在其中编辑、运行R的程序文件,可以跟踪运行,还可以构造文字、R结果图表融合在一起的研究报告、论文、图书、网站等。

界面一般分为四个窗格,其中编辑窗口与控制台(Console)是最重要的两个窗格。 编辑窗格用来查看和编辑程序、文本型的数据文件、程序与文字融合在一起的Rmd文件等。 控制台与基本R软件的命令行窗口基本相同,功能有所增强。

在编辑窗口中可以用操作系统中常用的编辑方法对源文件进行编辑,如复制、粘贴、查找、替换,还支持基于正则表达式的查找替换(关于正则表达式见41)。

其它的一些重要窗格包括:

  • Files: 列出当前项目的目录(文件夹)内容。其中以.R或者.r为扩展名的是R源程序文件,单击某一源程序文件就可以在编辑窗格中打开该文件。
  • Plots: 如果程序中有绘图结果,将会显示在这个窗格。因为绘图需要足够的空间,所以当屏幕分辨率过低或者Plots窗格太小的时候,可以点击“Zoom”图标将图形显示在一个单独的窗口中,或者将图形窗口作为唯一窗格显示。如何放大窗格见下面的使用技巧。
  • Help: R软件的文档与RStudio的文档都在这里。
  • Environment: 已经有定义的变量、函数都显示在这里。
  • History: 以前运行过的命令都显示在这里。不限于本次RStdudio运行期间,也包括以前使用RStudio时运行过的命令。
  • Packages: 显示已安装的R扩展包及其文档。
  • Viewer, Connection, Build, Git等窗格。

RStudio项目

用R和RStudio进行研究和数据分析,每个研究问题应该单独建立一个文件夹(目录)。该问题的所有数据、程序都放在对应的文件夹中。 在RStudio中,用“File – New Project – Existing Directory”选中该问题的目录,建立一个新的“项目”(project)。

再次进入RStudio后,用菜单“File – Recent Projects”找到已有的项目打开,然后就可以针对该项目进行分析了。 这样分项目进行研究的好处是,不同项目的可以使用同名的文件而不会有冲突,程序中用到某个文件时,只需要写文件名而不需要写文件所在的目录。

一个项目还可以有项目本身的一些特殊设置,用“Tools – Project Options”菜单打开设置。

帮助

在RStudio中有一个单独的Help窗格,如果需要,可以用菜单“View–Panes–Zoom help”将其放大到占据整个窗口空间。 但是,这一功能目前不支持放大显示字体的功能,不如在浏览器中方便。

RStudio的帮助窗格中包含R软件的官方文档,以及RStudio软件的的文档。“Search engine and keywords”项下面有分类的帮助。有软件包列表。

在基本R软件而不是RStudio的命令行中运行命令help.start()或者用RGUI的帮助菜单中“html帮助”可以打开系统默认的互联网浏览器,在其中查看帮助文档。

在命令行,用问号后面跟随函数名查询某函数的帮助。用example(函数名)的格式可以运行此函数的样例,如:

1
2
?mean
example(mean)

有时仅知道一些方法的名字而不知道具体的扩展包和函数名称,可以安装sos扩展包(package),用findFn("函数名")查询某个函数,结果显示在互联网浏览器软件中。

使用技巧

RStudio使用方法概要PDF下载

运行程序

可以在命令行直接输入命令运行,文字结果会显示在命令行窗口,图形结果显示在“Plots”窗格中。 在命令行窗口(Console)中可以用左右光标键移动光标,用上下光标键查找历史命令,输入命令的前几个字母后用“Ctrl+向上光标键”可以匹配地查找历史命令。

一般情况下,还是应该将R源程序保存在一个源程序文件中运行。 RStudio中“File – New File – R Script”可以打开一个新的无名的R源程序文件窗口供输入R源程序用。 输入一些程序后,保存文件,然后点击“Source”快捷图标就可以运行整个文件中的所有源程序,并会自动加上关于编码的选项。

编写R程序的正常做法是一边写一边试验运行,运行一般不是整体的运行而是写完一部分就运行一部分,运行没有错误才继续编写下一部分。 在R源程序窗口中,当插入光标在某行程序上的时候,点击窗口的“Run”快捷图标或者用快捷键“Ctrl+Enter键”可以运行该行; 选中若干程序行后,点击窗口的“Run”快捷图标或者用快捷键“Ctrl+Enter键”可以运行这些行。

中文编码问题

对于中文内容的R源程序、R Markdown源文件(.Rmd文件)、文本型数据文件(.txt,.csv),其中的中文内容可能有不同的编码选择,在中国除港澳台以外的地区主要使用GB18030(基本兼容于GB, GBK)和UTF-8,UTF-8是国际上更普遍使用的统一文字编码,涉及到计算机编程时应尽可能使用此编码系统。

在RStudio中新生成的R源程序、Rmd源文件一般自动用UTF-8编码。点击RStudio的文件窗格中显示的源文件,可以打开该源文件,但是因为已有源文件的编码不一定与RStudio的默认编码一致,可以会显示成乱码。为此,RStdio提供了“File – Reopen with Encoding”命令,我们主要试验其中GB18030和UTF-8两种选择一般就可以解决问题。如果选择GB18030显示就没有乱码了,最好再用菜单“File – Save with Encoding”并选择UTF-8将其保存为UTF-8编码。

其它的文本格式的文件也可以类似地处理,后面将会陆续提及。

Rmd文件

在科学研究中,R软件可以用来分析数据,生成数据分析报表和图形。R Markdown(简称Rmd)是一种特殊的文件格式,在这种文件中,即有R程序,又有说明文字,通过R和RStudio软件,可以运行其中的程序,并将说明文字、程序、程序的文字结果、图形结果统一地转换为一个研究报告,支持Word、PDF、网页、网站、幻灯片等许多种输出格式。在打开的Rmd源文件中,也可以选择其中的某一段R程序单独运行。所以,Rmd文件也可以作为一种特殊的R源程序文件。

用RStudio的“File – New File – R Markdown”菜单就可以生成一个新的Rmd文件并显示在编辑窗格中,其中已经有了一些样例内容,可以修改这些样例内容为自己的文字和程序。

Rmd文件中用```{r}开头,用```结尾的段落是R程序段,在显示的程序段的右侧有一个向右箭头形状的小图标(类似于媒体播放图标),点击该图标就可以运行该程序段。

打开Rmd文件后,用编辑窗口的Knit命令可以选择将文件整个地转换为HTML(网页)或者MS Word格式,如果操作系统中安装有LaTeX软件,还可以以LaTeX为中间格式转换为PDF文件。

为了将网页转换为PDF文件,建议使用Chrome浏览器打开HTML文件,然后选择菜单“打印”,选打印机为“另存为PDF”,然后选“更多设置”,将其中的“缩放”改为自定义,比例改为“90%”。