R语言编程:基于tidyverse
上QQ阅读APP看书,第一时间看更新

1.1 搭建R环境及常用操作

1.1.1 搭建R环境

打开R语言原生官网速度较慢,建议直接到R镜像站,目前国内有11个镜像站,我最近常用的是北京外国语大学的镜像站,其网址为:

https://mirrors.bfsu.edu.cn/CRAN/

读者可以根据自己的操作系统,下载相应的R语言版本即可(本书采用的是R-4.2.2)。在Windows系统安装R时,可根据系统选择32位或64位版本,建议取消勾选Message Translations。

建议安装在D盘,不要有中文路径,且路径名称不要有空格。

切记:若Windows系统用户名为中文,要先改成英文!

注意,最好保证计算机里有且只有一个版本的R,否则RStudio不会自动关联R,需要手动关联到其中一个R版本。

安装完成后,打开R,界面如图1.1所示。

图1.1 R 4.2.2软件界面

1.安装RStudio

不要直接使用R,建议使用更好用的R语言集成开发环境Rstudio。

下载并安装(或直接下载zip版解压)RStudio之后,RStudio将自动关联已安装的R。打开RStudio,操作界面各窗格及功能简介如图1.2所示。

图1.2 RStudio操作界面

2.一些必要的设置

切换安装扩展包的国内镜像源(任选其一),操作界面如图1.3所示。

图1.3 为RStudio设置国内镜像源

Tools -> Global Options… -> Options -> Packages,单击Change可修改镜像源,比如本书使用了北京外国语大学镜像源(Beijing Foreign Studies University)。

设置保存文件的默认编码方式为UTF-8,操作界面如图1.4所示。

图1.4 R Studio设置code编码

Tools -> Global Options… -> code -> Saving,在Default text encoding框,单击change,将相关设置修改为UTF-8

这样保存出来的各种R文件,都将采用UTF-8编码,这能够尽量避免含有中文字符的文件在其他计算机上打开显示乱码。

建议顺便再勾选Code -> Display下的Rainbow parentheses选项,这样代码中的配对括号将用不同颜色匹配。

另外,还建议在General -> Workspace菜单下取消勾选“Restore .RData into workspace at startup”,并将其下的“save workspace to .RData on exit:”改为“Never.”,这可以避免每次打开RStudio都加载之前的内存数据。

1.1.2 常用操作

1.安装包

扩展包(package),简称包。通常R包都来自CRAN,R包的审核比较严格,包的质量相对更有保障。建议使用命令安装R包,以下命令用于安装openxlsx包:

install.packages(“openxlsx”)

openxlsx为包名,必须要加引号(在R中,单双引号可通用)。

有些包不能自动安装,可以手动从网上搜索并下载.zip.tar.gz文件到本地,再手动安装(不建议手动安装),手动安装可依次单击Tools -> Install Packages,修改Install from,然后浏览安装,如图1.5所示。

图1.5 手动安装R包

手动安装包经常容易安装失败,通常是因为没有先安装该包的依赖包,故需要去包的网页查询其依赖包。若确定未安装对应的依赖包,则需要先安装它们。因为这往往又涉及依赖包的依赖包,所以最好不要手动安装包。另外,建议大家尽量用最新版本的R。

GitHub也是R包的重要来源,有些作者自己开发的R包只放在GitHub,也有很多CRAN R包的最新开发版位于GitHub,大家可以先安装devtoolsremotes包,再通过install_github()安装GitHub来源的包:

devtools::install_github(“tidyverse/dplyr”)  # 或者
remotes::install_github(“tidyverse/dplyr”)

在以上命令中,::的前面是包名,这是不单独加载包而使用包中函数的写法。

tidyuerseGitHub用户名,dplyr为该用户的名为dplyrrepository(仓库),也是包名。此外,通过“包名:::”前缀可以访问包的内部函数。注意,不是所有的仓库都是R包(含有DESCRIPTION文件是R包的标志)。

若因为网络等因素,导致直接从GitHub安装包失败,也可以将整个包文件夹从网页下载下来,解压缩到当前路径(或提供完整路径),再从本地安装:

install.packages(“dplyr-master”, repos=NULL, type=”source”)

另外,在R中生物信息领域自成一派,有专门的包,可以从bioconductor网站获取:

我们需要先安装BiocManager包,再用install()函数安装bioconductor来源的包:

BiocManager::install(“openxlsx”)

实用场景:R包默认安装在 .../R-4.x.x/library路径下。

你在自己的计算机上搭建好R语言环境,并安装好了很多常用包,然后又想到一台没有R环境、没有联网的计算机上复现代码。

具体方法:你只需要在那台计算机上安装相同版本的R软件,并安装到相同路径下,将新的library文件夹完全替换为自己计算机里的library文件夹即可1,这样运行起R代码跟自己计算机的效果没有任何区别。


[1]  可以用添加压缩包再解压的方式,这样速度能快一些。

2.加载包

library(openxlsx)

3.更新包

update.packages(“openxlsx”)
update.packages()                # 更新所有包

4.删除包

remove.packages(“openxlsx”)

5.获取或设置当前路径

getwd()
setwd(“D:/R-4.2.2/tests”)

特别注意

路径中的“\”必须用“/ ”或“\\”代替。

提示:关于更新R版本和更新包,笔者一般是紧跟最新R版本,顺便重新安装一遍所有包。为了省事,笔者是将所有自己常用包的安装命令(install.package(“...”))都放在一个R脚本中,并选择国内镜像,再全部运行即可。

6.赋值

R标准语法中赋值不是用 =,而是 <- 或 ->,代码如下:

x <- 1:10
x + 2
##  [1]  3  4  5  6  7  8  9 10 11 12

R也允许用“=”赋值,建议用更现代和简洁的“=”赋值。

在R中,为一行代码添加注释语句用 #。

7.基本运算

数学运算

+ - * /^(求幂)、%%(按模求余[2])、%/%(整除)。


[2]  可以对小数按模求余,例如5.4 %% 2.3结果为0.8

比较运算

><>=<===!=

identical(x,y)—判断两个对象是否严格相等;

all.equal(x,y)dplyr::near(x,y)—判断两个浮点数是否近似相等(误差为1.5e−8)。

0L == 0
## [1] TRUE
identical(0L, 0)
## [1] FALSE
sqrt(2)^2 == 2
## [1] FALSE
identical(sqrt(2)^2, 2)
## [1] FALSE
all.equal(sqrt(2)^2, 2)
## [1] TRUE
dplyr::near(sqrt(2)^2, 2)
## [1] TRUE

逻辑运算

| (或) & (与)! (非)xor()(异或)

&&||是短路运算,即遇到TRUE(FALSE)则返回TRUE(FALSE)而不继续往下计算;

&|是向量运算符,对向量中所有元素分别进行运算。

8.基本数据类型

R的基本数据类型

numeric— 数值型,又分为integer(整数型)和double(浮点型);

logical— 逻辑型,只有TRUEFALSE,或TF

character— 字符型,引号[3]括起来的若干字符。


[3]  在R中,单双引号通用。

R中用NA表示缺失值,NULL表示空值,NaN表示非数,Inf表示无穷大。

对于R中的大多数函数,NA具有“传染性”,即NA参与的运算,结果会变成NA。R自带的很多函数都提供na.rm参数设置,以便于设定计算时是否忽略缺失值。

特别要注意:判断x是否为NA,不是用x==NA,而是用is.na(x)

可用函数class(x) / typeof(x) / mode(x)查看对象x的类型。

在展现数据的细节方面,mode()性能最弱,class()性能一般,typeof()性能最强。

str(x)可以显示对象x的结构。

9.保存和载入数据

save(x, file = “data/dat.Rda”)
load(“data/dat.Rda”)

关于相对路径与绝对路径

编程中的文件路径,可以用绝对路径也可以用相对路径。

绝对路径是从盘符开始的完整路径,比如E:/R语言/data/a123.csv

相对路径是相对于当前路径的路径,因为通常操作的文件都是在当前路径,那么“从盘符到当前路径”这部分是大家所共有的,所以可以省略不写,只写从当前路径再往下的路径即可。比如,当前文件夹E:/R语言中有data文件夹,里面有数据文件a123.csv,要想访问到它的路径,只需写data/a123.csv

10.清屏和清除内存变量

按“Ctrl + L”组合键或单击命令窗口右上角的“小刷子”图标可对命令窗口清屏。

若要清除当前变量,使用以下命令:

rm(x)                       # 清除变量x
rm(list = ls(all = TRUE))   # 清除所有当前变量

注意:

单击Environment窗口的“小刷子”图标也可以清除所有当前变量。

11.获取帮助

学习编程语言最好的资料就是帮助

函数帮助

命令窗口执行:

?plot

则在help窗口打开plot()函数的帮助:包括函数来自哪个包、函数的描述、参数说明、更多解释、实例等。

在线帮助(需联网)

若想根据某算法的名字或关键词,搜索哪个包能实现该算法:

RSiteSearch(“network”)

其他主要网络资源

R官方镜像站(例如本书作者所使用的就是北京外国语大学的镜像站https://mirrors.bfsu. edu.cn/CRAN/),镜像站下的各种资源,建议读者去详细了解。比如,常用的是包的帮助文档:在镜像站,单击左侧的Packages,再单击“sort by name”,则出现所有可用的CRAN包列表。单击某个包名,则进入该包的介绍页,比如tidyverse包的官方介绍页如图1.6所示。

图1.6 tidyverse包的官方介绍页

Reference manual是参考手册,包含该包所有函数和自带数据集的说明,供查阅使用;Vignettes是包的作者写的使用文档,它是该包的最佳学习资料。

在使用R语言的过程中遇到各种问题,建议将报错信息设置为英文:Sys.setenv(LANGUAGE = "en"), 建议用bing国际版搜索报错信息,更容易找到答案。另外,GitHub是丰富的程序代码仓库,在bing搜索时,加上GitHub关键词,可能有意想不到的收获。

其他开放的R社区如下:

Stack overflow;

R-Bloggers;

Tidyverse;

Rstudio;

统计之都。

12.R Script与R Project

R脚本是单个可执行的R代码文件,后缀名为 .R,单击New File按钮,选择R Script,或使用快捷键(Ctrl + Shift + N),可以新建R脚本。

R脚本中都是可执行的R代码和注释,选中部分代码,单击Run按钮即可运行选中的代码。

R项目(Project)是完成某个项目或任务的一系列文件的合集(文件夹),包括数据文件、若干R脚本及其他附件,还包含一个 *.Rproj文件;

强烈建议读者使用 R 项目和相对路径,这样能系统地管理服务于共同目的的一系列文件,可以方便移动文件,而不需要做任何有关路径的代码修改就能成功运行。

创建R项目:单击Create a Project按钮,进入创建R Project向导,如图1.7所示。

图1.7 创建R Project向导

若在某个已存在的文件夹下创建项目,则选择Existing Directory;若需要新建文件夹创建项目,则选择New Directory。

创建完成后,在文件夹下出现一个 *.Rproj文件,双击它(关联RStudio打开),则进入该R项目,可以完成访问、编辑文件和运行脚本等操作。

13.R Markdown

后缀名为 .Rmd的交互式文档,是markdown语法与R脚本的结合,可以将可执行的R代码和不可执行的文字叙述,融为一个文件。

单击New File按钮,选择R Markdown即可创建,建议优先使用自带的模板和来自网络的现成模板。

R Markdown适合编写包含R语言代码的学习笔记、演示文档、论文等,可以生成docx pptxhtmlpdf等多种文档格式。更多有关R Markdown的内容将在第5章展开讨论。

此外,近期RStudio推出了新一代文档沟通工具Quarto,其用法与R Markdown基本一致,具体使用方法请参阅官方文档。