Gamer's Show

你知道人生最要紧的事是快乐不停

0%

课程准备

1_R语言基础

01 R语言简介

R语言历史

R语言是一款统计软件,R语言也是一门编程语言,R语言也是一个数据分析平台。R是一个免费自由且跨平台通用的统计计算与绘图软件,它有 Windows、Mac、Linux 等版本,均可免费下载使用。R 项目(The R Project for Statistical Computing)最早由新西兰奥克兰大学(Auckland University)的 Robert Gentleman(1959-)和 Ross Ihaka(1954-) 开发,故软件取两人名字的首字母命名为 R 。该项目始于 1993年,2000年发布了首个官方版本 R 1.0.0 ,后期维护由 R 核心团队(R Core Team)负责。截止 2022-06-23,,已发布到 4.2.1版本。凭借其开源、免费、自由等开放式理念,R 迅速获得流行,目前已成为学术研究和商业应用领域最为常用的数据分析软件之一。随着大数据行业的发展,R语言变得越来越流行,R语言发挥了越来越重要的作用。

为什么要学习 R语言

R是个多面手,你做科研过程的数据计算、统计检验、统计建模、数据挖掘、数据可视化它全包了。学了它,不用向以前必须学习统计软件STATA或者SPSS,同时还要学Graphpad、origin等绘图工具。同时R的脚本会记录你的数据处理工作的整个过程,过3年,你的学弟依旧可以拿着你的原始数据,重现你l论文的数据统计与可视化结果。

R能干啥,可能从下面的 R task view看得更清楚

image-20220824225001163

image-20220824225135768

02 R语言的优缺点

R语言的优点

  • 开源、免费,具有完整的统计学功能,有大量的扩展包
    • 有效的数据处理和保存机制。
    • 拥有一整套数组和矩阵的操作运算符。
    • 一系列连贯而又完整的数据分析中间工具。
    • 图形统计可以对数据直接进行分析和显示,可用于多种图形设备。
    • 一种相当完善、简洁和高效的程序设计语言。
    • R语言是彻底面向对象的统计编程语言。
    • R语言和其它编程语言、数据库之间有很好的接口。
    • R语言是自由软件,可以放心大胆地使用,但其功能却不比任何其它同类软件差。
    • R语言具有丰富的网上资源

R语言的缺点

  • 开源、免费,具有完整的统计学功能,有大量的扩展包
    • 学习成本大;
    • 不擅长处理非结构数据;
    • 计算消耗资源较多;
    • R的扩展包太多了,比较混乱,不容易找到适合的扩展包;
    • 不擅长多线程处理。

R语言与 Excel对比

  • R语言开源免费,Excel收费;
  • R语言支持 Linux版本,Excel只支持 windows,macos,ios,Android;
  • 能够计算大数据,Excel默认只能处理 100万行数据;
  • R语言有更好扩展能力,有很多现成的包;
  • R语言有更好的绘图能力,例如可以很方便绘制热图,基因组圈图等复杂图形;
  • R语言的 Bioconductor项目可以处理生物数据,例如基因表达数据,单细胞测序等;
  • R语言学习成本较大,不如 Excel简单。

是时候放弃excel了

R语言与 Python对比

  • R语言具有更强大的统计学功能;
  • R语言的 Bioconductor项目可以处理生物数据,例如基因表达数据,单细胞测序等;
  • R语言的绘图能力更强,尤其是 ggplot2包;
  • python兼容性不好;
  • python具有更强大的文本处理能力;
  • python资源管理更好,R不擅长多线程计算,更消耗资源

我建议:目前的科研状态,一定要学习 R 或 Python,至少学一种,实际上应该都会。如果你对==生物统计学、生物信息学==更感兴趣,我建议你先学R。如果你对机器学习最感兴趣,特别是像深度学习这样的现代方法,那么应该首先选择 Python。当然如果你有python基础,直接使用python就可,不学R。如果没有,先学R。这两种语言很多的地方是相通的。学会了一个再学另外一个相对简单。真正的数据分析科学家与工程师,都是左手R 右手Python的。看下面的链接

R vs Python:R是现在最好的数据科学语言吗?

本课程为啥不在使用SPSS?

  • 因为不开源,使用的时候写论文写统计方法,有人要问你使用的SPSS的序列号,不好回答。
  • 另外在科学图形绘制上,SPSS没有任何优势
  • 最新的统计方法都是在目前都是R上出现,最新的SPSS需要调用R插件进行新的统计方法的使用。

03 结构化数据与非结构化数据

  • 结构化数据:信息能够用数据或统一的结构加以表示,我们称之为结构化数据,如数字、符号;
  • 非结构化数据:信息无法用数字或统一的结构表示,如文本、图像、声音、网页等,我们称之为非结构化数据。

R语言更擅长处理结构化数据,因此,在使用 R之前,尽量确保数据是严格的表格结构。也就是二位的表格,分为行和列。在 R语言中,行称为“观测”,列称为“变量”。

04 数据分析的六个过程

  1. 数据采集
  2. 数据存储
  3. 统计分析
  4. 数据挖掘
  5. 数据可视化
  6. 生成报告

2_R与 Rstudio软件安装

01 R软件安装

R语言支持 windows,macos,linux等多个系统平台,提供图形化界面,下载和安装都不难,可以直接从官网进行下载,当前最新版本为 4.2.1。R语言平均每半年更新一个比较大的版本,中间也会有一些小版本,建议安装最新的版本。可以从 R的官网下载软件安装包,软件最好安装到系统默认目录下。

R官网: https://www.r-project.org/ ,如下图

image-20220825104635253

windows系统:
下载地址:https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/base/R-4.2.1-win.exe

Mac系统 :
下载地址:https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/macosx/base/R-4.2.1.pkg

02Rstudio软件安装

当前 R语言的集成开发环境很多,但其中 Rstudio可以说是最优秀的,Rstudio是 R软件的一个集成开发环境,为 R的使用提供了极大的便利,Rstudio本身并不集成 R软件,需要首先安装 R软件,Rstudio会调用 R软件。Rstudio支持 windows,macos,Linux等多个系统平台,并且提供免费的桌面版与服务器版本可供选择,服务器版本可以搭建多用户使用场景,直接通过网络浏览器访问 R。此外,Rstudio公司还开发了大量 R语言的扩展包,操作简单,功能强大,极大扩展了 R语言的功能。到10月份Rstudio将更名为Posit,将R与python的链接更方便

官方网站:https://www.rstudio.com/,如下图

image-20220825105959538

下载地址:

windows:
https://download1.rstudio.org/desktop/windows/RStudio-2022.07.1-554.exe

macos:
https://download1.rstudio.org/desktop/macos/RStudio-2022.07.1-554.dmg

rstudio设置

为了更好地使用 Rstuido软件,需要对软件进行一些设置,主要包括主题背景,字体大小,
字体编码,默认软件源等。

image-20220825110612716

03 解决windows下 Rstudio无法识别中文问题

方法一:创建一个新账户
创建一个新的英文账户,或者修改本地账户为使用 windows账户登录。

方法二:修改缓存目录
Rstudio遇到中文报错,主要原因在于,Rstudio需要一个临时缓存文件,windows系统下这个默认目录在”C:\User\XXXX\AppData\Local\Temp”。其中 XXXX为用户名,如果是中文,则无法识别,所以,我们需要修改 TEMP和 TMP这个目录环境变量。右键此电脑,选择属性,然后点到高级系统设置,选择环境变量

image-20220825111659009

修改 TEMP和 TMP变量,其中不能有中文,如下

image-20220825112113735

3_开始使用 R

01设置工作目录

使用 R语言的第一个过程就是设置工作目录,使用 R语言经常需要读写文件,设置好工作目录可以方便读写文件。需要对不同系统目录的写法有所了解,windows目录结构与 Linux(Mac)目录结构主要差别在两点:第一,Linux(Mac)系统不存在盘符,所有数据路径都是有“/”开始;第二:Linux系统采用正斜线分割目录,windows采用反斜线分割目录。在 R中可以使用正斜线。另外,Rstudio目前对中文支持并不好,目录中最好不要有中文,否则会报错。

1
2
3
windows系统目录结构:C:\Users\xxx\Desktop\
macos系统目录结构:/Users/xxx/Desktop/
Linux系统目录结构:/home/xxx/

设置工作目录

方法一:Crtl+Shift+H快捷键 (windows) ; cmd+Shift+H快捷键(Mac) 或者通过菜单,如下

image-20220825113225359

方法二:使用鼠标,通过文件管理窗口设置工作目录

image-20220825114553695

image-20220825114628797

方法三:使用 R函数

1
2
3
4
#查看当前目录
getwd()
#设置想要的工作目录,这里以账户为xxx的桌面为例子,设置为工作目录,注意使用的路径符号为正斜杆/.
setwd("c:/Users/xxx/Desktop/")

02创建 Project

创建 Project可以将所有数据放到一个目录下,R的 Project会保存分析过程中全部内容,方便管理以及分享。

image-20220825115043896

03 R软件的运行

R软件有交互式与脚本式运行两种方式,交互式便于进行数据探索,脚本式便于批量化和自动化处理。

脚本方式运行中,创建一个扩展名为.R的文件,例如test.R可以在Rstudio脚本窗口中一条条 运行,也可以一起全部运行。

[在Linux命令行中,可以使用Rscript命令运行脚本文件,或者使用R -f 来运行,当计算量较大,需要较长的运算时,或者可重复性计算等条件下,需要使用无监督的脚本式运行。在使用脚本运行R时,需要保证脚本能够正确执行,通常先使用小数据进行测试,并且运行过程中将结果及时保存为文件,例如绘制出的图片,而不是交互式显示。R脚本也可以提供选项参数,将R脚本转换为一个可执行程序。]

04 函数

R语言函数

学习 R语言的本质就是学习 R函数的过程,因为在 R中,每一步操作都需要使用 R的函数。在 R语言中,每个 R函数都需要后面介绍小括号,这是为了与环境中的变量区分开。比如定义一个名为 data的变量,R中还自带一个 data函数,这样就无法区分,因此,R函数需要接上小括号,例如 data()函数。R中需要使用选项参数,用来调节 R函数的功能。选项和参数之间用等号连接。不同选项后面接不同的参数,例如有的选项接数值参数,有的接字符串,有的接逻辑值。例如下面的案例。

1
2
#一条典型的R函数 
plot(x = women$height,y = women$weight,col="red",pch=c(16,17,18),ann = F)
  • 其中 plot()为绘图函数,后面必须是小括号;
  • x选项为输入 x轴的值,接一个向量;
  • y选项为输入 y轴的值,接一个向量;
  • col选项为颜色值,接一个字符串;
  • pch选项为点的性状,接一个数值向量;
  • ann选项为是否显示x轴与y轴的标签,接一个逻辑值;
游戏:测试计算机算力

随机生成十万,百万,千万,亿,十亿个随机数,然后利用 R进行求和计算。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#十万随机数 
x <- runif(100000,min = 1,max = 100)
length(x)
sum(x)
system.time(x <- runif(1000000,min = 1,max = 100))
#用户时间: 是处理用户应用程序代码(R 代码)所花费的 CPU 时间。
#系统时间: 用户应用程序访问系统资源,则该处理时间将报告为系统时间。
#流逝时间: 它测量代码块运行时经过的时钟时间,用户必须等待 R 完成运行代码的整体时间。

#百万随机数
x_1 <- runif(1000000,min = 1,max = 100)
sum(x_1)
system.time(x_1 <- runif(1000000,min = 1,max = 100))

#千万随机数
x_2 <- runif(10000000,min = 1,max = 100)
sum(x_2)
system.time(x_2 <- runif(10000000,min = 1,max = 100))

#亿随机数
x_3 <- runif(100000000,min = 1,max = 100)
sum(x_3)
system.time(x_3 <- runif(100000000,min = 1,max = 100))

#小心点,别轻易尝试,会很慢,10亿
system.time(x_4 <- runif(1000000000,min = 1,max = 100))
sum(x_4)
#100亿,内存不够报错Error: cannot allocate vector of size 74.5 Gb
system.time(x <- runif(10000000000,min = 1,max = 100))

#展示环境变量
ls()
#清除环境变量
rm(list= "x_1")
#清除所有变量,但是注意并没有清除内存
rm(list=ls())

#清除内存
gc()

# 揭示下结果
# used (Mb) gc trigger (Mb) max used (Mb)
# Ncells 994704 53.2 2064062 110.3 1471043 78.6
# Vcells 2690772 20.6 1028036240 7843.3 1113693366 8496.9
#######################################################
#used是当前使用情况,gc trigger是会触发垃圾回收的值,maxused是上次gc()操作或者是此次启动R后使用最大值.(Mb)是Ncells和Vcells的大小转换为Mb单位时的值.
#Ncells即cons cells,32位R中占28B,64位R中占56B,我是用的64位的R,所以
994704*56/(1024^2)
#53.12292,约等于53.2

#Vcells即vector cells,占8B,所以
2690772*8/(1024^2)
#20.52896,约等于20.6
R语言括号
  • 括号按照性状可以分为小括号,中括号以及大括号,大括号也叫作花括号。在 R语言中,各种括号实现不同的功能。其中小括号具有重要作用。是函数式编程语言,所有的功能都需要通过函数完成。在 R中,为了区分字符,变量,数据集,函数以及扩展包,所以函数后面必须接小括号。例如 sum三个字符,如果要表示一个字符,就使用双引号,如果表示求和函数,作为 sum(),如果作为一个变量,数据集,直接写 sum即可。如果代表一个 R包,则直接 library加载即可。
  • 中括号在 R中也有重要作用,数据索引时要用到。
  • 花括号与其他编程语言类似,都表示一个代码块,用在自定义 R函数中。
R语言提示警告以及错误

正确区分软件错误,R语言在运行过程中会输出很多信息,这些信息主要包括三类,分别是:

  • 运行状态信息,正常信息,不用担心;
  • 警告信息 warnings,不影响软件运行,需要注意;
  • 错误信息 Error,软件终止运行,需要检查错误;

05常用快捷键

下面列出 R或者 Rstudio中一些常用快捷键:

  • alt+-

    R语言的赋值使用“<-”,每次需要敲两个字符,非常麻烦,在 Rstudio中可以使用“alt+-”直接生成,非常方便,如果使用右侧 alt键,更加容易。

  • ctrl+shfit+h

    使用 R第一件事情就是设置工作目录,如果不习惯敲 setwd()函数或者不熟悉系统目录结构,可以使用该快捷键直接用鼠标选择。

  • esc

    中断程序,非常有用。

  • tab

tab自动补齐,可以补齐函数,选项参数等;

  • ctrl+L

    相当于清屏,与 Linux 一致。

  • 上下箭头

    历史记录;

  • ctrl+sfhit+F10

    重新启动 R,有些情况下需要重新启动 R,这个时候无需关闭整个 Rstudio,使用该快捷键即可重新启动 R。

  • ctrl+r

    ctrl+r快捷键可以快速调出使用过的历史记录,如果有些命令太长,使用这个快捷键非常方便。

  • ctrl+向上

    也是快速调出历史记录,与 ctrl+r类似。

  • ctrl++,ctrl+-

    调整字体大小。

  • ctrl+shift+m

    如果使用 tidyverse系列包,经常需要使用管道符“%>%”,使用该快捷键可以直接输出管道符。

  • alt+shift+k

    可以快速调出所有快捷键列表。

06自定义R环境

R语言可以通过自定义修改默认行为,例如修改默认提示符,修改默认镜像地址,修改默认加载包目录,默认有效数字位数,启动后自动加载包等。
R每次启动时,会从默认目录下(windows系统一般为我的文档)读取.Rpofile文件,对 R的自定义,就是修改该配置文件。这个默认配置文件类似于 Linux系统家目录下的.bashrc文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#通过 file.edit()函数创建文件 
file.edit("~/.Rprofile")
########################################################
## 在Rprofile完成下面工作 ##
########################################################
#修改提示符
#options(prompt="$")
#options(prompt=">")
#修改次级提示符
#options (continue="+")
#options(continue = "% ")
#修改默认包加载目录
#.libPaths("C:/Users/Administrator/AppData/Local/R/win-library/4.2")
.libPaths("G:/R/R-4.2.1/library/")
#修改默认 R镜像
local({r <-getOption("repos")
r["CRAN"]<-"https://mirrors.tuna.tsinghua.edu.cn/CRAN/"
options(repos=r)})
#修改 bioconductor镜像
options(BioC_mirror="http://mirrors.ustc.edu.cn/bioc/")

#启动加载函数
.First <- function() {
# library(BioCManager,quietly = TRUE)
cat ("\nWelcome at",date(),"\n")
}

.Last <- function() {
cat ("\nGoodbye at ",date(),"\n")
}

4_语言包管理

R语言的一大优势就是有各种各样的扩展包,所谓 R扩展包,就是将数据处理的算法通过 R函数来实现,在加上测试数据,说明文档整合在一起,就是 R的扩展包。在使用 R的过程中,肯定需要使用到 R的包,因此,需要掌握 R包的管理,包括包的查找,安装,加载,升级,取消加载,删除,查看帮助文档等等操作。

如何选择合适的 R包

  • 1.通过 R TaskView查找需要的软件包,根据大类查找;在Rstudio的help中的Home打开R resource选择CRAN Task Views,网站如下:https://cran.rstudio.com/web/views/

image-20220825230033920

##有关生物信息的的task views取消了 需要看

https://cran.r-hub.io/web/views/Genetics.html

###有关统计学习与教学的包

https://cran.rstudio.com/web/views/TeachingStatistics.html

  • 2阅读文献,参考里面使用的 R包。
  • 3 bioconductor项目

Bioconductor 是建立在 R语言环境上的,用于生物信息数据的注释、处理、分析及可视化工具包的总集,由一系列 R扩展包组成。很多生物数据都是使用 bioconductor包来分析的。

Bioconductor官网:http://www.bioconductor.org/

R包的管理

由于不用 R包之间存在相互依赖的关系,因此,强烈推荐采用在线安装的方式,这样软件可以自动解决依赖关系问题,节约大量时间。R默认的服务器在国外,为了加快下载速度,需要将 R镜像站点修改为国内镜像站点。

R包默认安装到以下目录

R包的默认安装路径与登录账号是否为管理员有关,如果登录的为管理员账号,则默认安装到 R安装目录下。如果登录的为普通账户,则在每个账号下的**==我的文档==**中。

1
2
3
4
5
6
7
8
9
#windows系统: 
G:\R\R-4.2.1\library
C:\Users\xxxx\Documents\R\win-library\4.2
#macos系统:
/Library/Frameworks/R.framework/Versions/4.0/Resources/library

#查看R包安装目录
.libPaths()
.Library

设置镜像

通过网络安装 R包,网络速度影响比较大,因此要选择合适的镜像,一般选择距离较近的镜像。

1
2
3
chooseCRANmirror()   
chooseBioCmirror()
setRepositories()

常用 R镜像站点

R包管理

可以将每个 R包开成一个手机 App,R包的管理类似于手机应用的管理,包括搜索,下载,安装,打开,卸载等操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#安装 vcd包 
install.packages("vcd")
#一次安装多个包
install.packages(c("ggplot2","pheatmap"))
#查看已安装的包
installed.packages()

#加载 R包
library(vcd)
require(vcd)

#升级软件包
update.packages()

#删除扩展包,从磁盘中移除
remove.packages("vcd")

#取消加载,从内存中移除
detach("package:vcd")

#其余函数
#列出 R包中的函数
ls(package:base)
#加载包中的数据集
data(package="vcd")

#查看当前环境哪些包加载
search()
#列出当前包
(.packages())
#列出有效包
(.packages(all.available=TRUE))
#列出加载包的路径
find.package()
path.package()

安装 github网站的 R包

1
2
3
4
5
6
7
# 安装 devtools 
install.packages("devtools")
library(devtools)
#github在线安装
install_github("github_user_name/package_name")
#下载到本地安装
devtools::install_local("path_to_package_file.zip")

安装 Bioconductor网站的 R包

1
2
install.packages("BiocManager")
BiocManager::install("DESeq2")

检查更新R包,不建议频繁更新,半年一次就好

1
2
3
4
5
6
7
8
#安装rvcheck
BiocManager::install("rvcheck")
#加载rvcheck
library(rvcheck)
#检查R版本是否要更新
check_r()
#更新全部R以及包
rvcheck::update_all()

查看帮助文档

学习 R语言需要经常查看帮助文档,包括 R包的帮助文档,查看帮助文档可以快速了解一些函数的用法。不过由于开发者不同,因此帮助文档的水平也参差不齐。查看帮助文档,可以使用 help()函数,一般的 R函数都会自带案例代码,可以直接使用 example()函数运行这些代码。此外,一些 R包还提供一种 vignette格式的文档。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 #打开帮助页 
help()
#查看函数帮助
?ggplot2
#查看扩展包里函数
??heatmap
#查看包帮助文档
help(package="ggplot2" )
#运行函数案例代码
example("heatmap")
#查看 vignettes格式文档
browseVignettes()
#R网站搜索
RSiteSearch("heatmap")

R包迁移

直接拷贝 R包

R包一般都是一个完整文件,只需要将 R包整个文件夹迁移走,一般就可以运行。对 R包进行迁移时,尽量保证 R版本一致。直接将整个 R包目录拷贝到新的目录下即可。首先找到 R包的安装目录,然后将整个目录打包,拷贝到另外一个目录解压缩。

1
2
#找到R包的安装目录
.libPaths()

该方法只是一种方案,绝大部分包是可以的。但是注意不能将 windows系统安装的迁移到Linux下。该方法也不是万无一失,比如 R包需要系统一些配置,缺少了还是无法运行。

获取名字重新安装

获取要迁移的 R包名字列表,在一台设备上使用循环逐个安装。但是该方法无法处理 github上安装的包。

1
2
3
4
5
6
7
8
9
10
#保存 A设备上的 R包名字列表; 
oldip <- installed.packages()[,1]
save(oldip,file = "installedPacckages.Rdata")

#在 B设备上进行安装;
load("installedPacckages.Rdata")
newip <- installed.packages()[,1]
for (i in setdiff(oldip,newip)) {
BiocManager::install(i)
}

5_文件操作

一般情况下我们需要分析的数据都是存储在文件中,那么利用 R分析数据的第一步就是将输入读入 R语言。如果分析的数据是记录着纸质载体上,还需要将数据手动录入,然后保存为一个文件。在 R中分析文件一般是文件文件,通常是以逗号分隔的 csv文件,如果数据本身包含逗号,就需要使用制表符 tab分隔的文件。有些情况下还有需要处理其他统计软件生成的文件,例如 Excel生成的 xlsx格式文件等。R可以很方便的读写多种格式文件。

文件类型

1、csv
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。

1
2
3
name,age 
张三,20
李四,30

2、tsv
TSV:tab separated values;即“制表符分隔值”,如:

1
2
3
name    age 
张三 20
李四 30

Rstudio导入文件

通过 Rstudio导入文件 , 如下:

image-20220827003446667

  • data :文件路径
  • header : 第一行是否作为表头
  • sep :分隔符
  • row.names: 哪一列作为行名
  • stringsAsFactors: 字符串是否作为因子
  • na.strings :空值用什么表示

函数读入文件

在 Rstudio中,可以通过点击鼠标读入文件,在读入文件之前,需要对文件格式和内容有所了解。例如文件是否是一个标准的列表形式,也就是是否为结构化数据。文件存储格式,是二进制还是纯文本,如果是纯文本,文件扩展名是什么?用什么分隔符分割?文件有多少行,多少列? 第一行是否为列名,第一列是否为行名?清楚了这些之后就可以读入文件了。

R提供了大量读入文件的函数,这些函数通常是以 read.*开头,后面接文件扩展,例如 read.csv,read.xlsx,read.spss等。其中最常用的为 read.table。read.table包括以下重要选项参数。

1、data:后面接文件路径,注意文件路径一定要加引号,注意 windows系统文件路径的写法。

2、header:只接逻辑值 TRUE或者 FALSE,代表第一行是否作为表头,默认为 FALSE。如果不设置,R会默认添加 V1,V2等作为列名。

3、sep:分隔符,读入文件最重要的一个选项,如果设置错误,文件格式很乱,通常就是逗号“,”,制表符“\t”或者冒号“:”等。

4、row.names:后面接数字,指定哪一列作为行名,默认是 0,通常可以设置为 1。

5、stringsAsFactors:后面接逻辑值,设置为T,R语言默认会将文件中的字符串自动转换为因子。

6、na.strings:后面接字符串,指定文件中空值的表示方法。

1
2
3
4
5
6
7
8
9
#读入一个文件,存入 x变量   
x <- read.table("./1998cross-sectional+data+set_released+version.csv")
#读入文件,指定分隔符
x <- read.table(file = "./1998cross-sectional+data+set_released+version.csv", header = T,sep = ",")
#读入文件,指定分隔符和列名
x <- read.csv(file = "./1998cross-sectional+data+set_released+version.csv",header = T,row.names = 1)
#读入文件,指定分隔符、表头与行名以及字符串不作为因子
x <- read.csv(file = "differential_expression.csv",header = T,sep = ",",row.names =
1,na.strings = "NA",stringsAsFactors = F)

无论使用哪个函数读取文件,R中读入的数据都存储为数据框这种数据类型。通常将文件保存为一个变量。读入文件之后,需要验证文件是否读入成功,通常使用 head函数截取文件头部显示出来,判断格式是否正确,在 Rstudio中也可以使用 View()函数将全部内容显示出来。如果格式不正确就需要修改命令重新读取文件;如果没有问题,就可以对数据进行后续的分析了。

1
2
3
4
5
6
7
8
9
10
11
12
13
#查看数据结构 
class(x)
#查看文件头部
head(x)
#查看文件尾部
tail(dta)
#查看行名,列名
rownames(x)
colnames(x)
#View窗口中查看数据
View(x)
#查看数据属性信息
str(x)

函数写入文件

数据处理结束之后,需要将存储在变量中的结果保存到文件中,R提供了大量写入文件的函数,这些函数通常与 read系列都是对应的,用法也类似使用起来也并不难。

1
2
#写入文件 
write.csv(x = x,file = "matrix.csv",sep = ",",append = F)
  • x:要写入文件中的数据集名字。
  • File:文件路径和文件名,注意加引号,需要自己给文件命名,注意扩展名最好与分隔符
  • 匹配。
  • sep:分隔符,如果是 csv文件,sep设置为逗号,制表符分割,则设置为“\t”
  • append:接逻辑值,是否追加写入

读写 excel文件

Excel是全球最流行的电子表格程序,即使你可以使用 R语言处理所有的数据分析工作,但是总有一天你不得不处理别人传给你 Excel生成的电子表格需要你帮忙处理。还好 R可以很方便的处理 excel的电子表格。通常处理 Excel表格有两种方法。

方法一:将excel文件另存为 csv或者 tsv

image-20220827094314568

方法二:readr,xlsx,openxlsx等包
R中有大量可以读写 Excel电子表格的包,使用方法与 read.table()函数类似,只需注意Excel的电子表格分为工作簿与工作表,一个工作簿中包含多个工作表(sheet),因此需要指定读取工作簿中那个工作表,可以指定工作表的名字,也可以使用顺序号

1
2
3
4
5
6
7
8
9
#安装 openxlsx包 
install.packages("openxlsx")
#加载 openxlsx包
library(openxlsx)
#读入 excel文件,指定 sheet的序号或者名称
x <- read.xlsx(xlsxFile= "./lettuce.xlsx",sheet = "treatment", rows = 1:60,cols = 1:5)
x <- read.xlsx(xlsxFile= "./lettuce.xlsx",sheet = 2, rows = 1:60,cols = 1:5)
#写入 Excel文件,设置 sheet名
write.xlsx(x = x,sheetName = "dta",file = "dta.xlsx",append = F)

其他 R数据格式

除了常规各种文本表格之外,R还提供了两种文件格式,分别是 RDS与 Rdata格式。RDS可以用来存储单个数据集,Rdata可以存储多个 R数据集。R内置格式的好处是对 R软件支持更好,便于分享,且内置压缩算法,同样的数据内容,文件更小,便于传输。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#数据集iris 数据框"data.frame"结构
?iris
head(iris)
class(iris)
data(iris)

#数据集iris 数组"array"结构
?iris3
head(iris3)
class(iris3)
data(iris3)

#当前工作目录
getwd()
#文件夹下所有内容
dir()
#write RDS file
saveRDS(iris,file="iris.RDS")
#read RDS file
rdsdata <- readRDS("iris.RDS")

#Write RData file
save(iris,iris3,file = "iris.Rdata")
#加载变量
load("iris.Rdata")
#所有变量存储在.Rdata
save.image()

补充R语言下的文件夹与文件操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#查看当前目录下文件
dir()
#列出当前文件夹下所有文件夹,包括隐藏文件夹
list.dirs()
#列出当前文件夹下所有文件夹,所有文件
list.files(path = ".")
#显示文件夹下面所有的文件,包括以.开头的文件,可以设置all.files = TRUE
list.files(path = ".",all.files = TRUE)
#只关注csv文件可以使用模式匹配,也就是正则表达式
list.files(path = ".",pattern = "csv$")

#创建文件夹
dir.create("ab")
#删除文件夹
unlink("ab")

#创建文件
file.create("file_name.txt")
#编辑文件
file.edit("file_name.txt")
#重命名文件
file.rename("file_name.txt","file_name_2.txt")
#复制文件
file.copy("file_name_2.txt","file_name_3.txt")
#删除文件
file.remove(c("file_name_2.txt","file_name_3.txt"))

6_数据结构

在使用R语言过程中,每一步中都需要关注R语言的数据结构。数据结构是R语言中最重要的内容,也是最难的一部分,学会了这部分之后,R语言就不难了。很多时候,函数无法运行,都是因为数据结构的问题。在学习R语言数据结构之前需要首先了解下数据的类型。

1数据类型

数据类型主要表示数据代表哪种内容,是字符串还是数值,逻辑值,或者时间日期等。数值可以用于计算,字符串不能用来计算,逻辑值用来判断等。其实这个在excel中我们也见过,Excel中数据类型如下图所示:

image-20220827215303054

R的数值类型主要包括字符、数值、复数、逻辑4类,如下。我们主要用字符、数值和逻辑三类。

R的数值类型

image-20220827215449356

2常用数据结构

R的数据结构主要包括以下几种:向量、,每一种都有固定的用处,学习R语言需要非常熟悉每一种数据结构的特点。

image-20220827221123112

3内置数据集

R 语言的一个好处是内置了大量数据集,一般 R扩展包也包含数据集,这样无需自己准备输入文件,可以很方便的重复案例的内容。启动 R之后,默认已经加载了 datasets包,里面包含了大量数据集,使用 data()函数可以显示所有数据集。直接敲数据集的名字就能够打印出数据集的内容,内置数据集与自己通过文件将数据读入 R中,存储为变量效果上是一样的。

1
2
3
4
5
# 显示所有内置数据集 ,来自‘datasets’这个包  
data()
#加载扩展包数据集
data(package = "MASS")
data(package = "ggplot2")

4 向量

向量:vector,是 R中最重要的一个概念,它是构成其他数据结构的基础。向量其实是用于存储数值型、字符型或逻辑型数据的一维数组。R中的向量与解析几何或者物理学中有数值和方向的量不同,R中的向量是一个集合,即可以是数值的集合也可以是字符串或者逻辑值的集合。其余数据结构都由向量构成。

4.1 创建向量

用函数 c来创建向量。c代表 concatenate连接,也可以理解为收集 collect,或者合并 combine。新手经常犯的错误就是忘了使用 c()函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#R内置向量 
rivers
euro
plot(rivers)
hist(rivers)
names(euro)
length(euro)
a <- c(1,2,3)
#字符型向量
b <- c("red","green","blue")
#生成连续型向量
c <- seq(1,100,2)
d <- rep(c(1,2),5)

#数据类型、特征
class(a)
length(a)
names(a)

# 向量化操作
a
a*2
paste(b,a,sep = "-")

4.2 向量索引

1
2
3
4
rivers[c(1)] 
euro[1:3]
euro[-(1:3)]
euro["ATS"]

4.3 向量计算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
x <- runif(10000000,min = 1,max = 100)   
length(x)
sum(x)
mean(x)
var(x)
sd(x)
median(x)
range(x)
abs(x)
sqrt(x)
a <- 1:5
b <- 10:1
a+1
a*2
a+b

5 矩阵

矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合。向量是一维的,而矩阵是二维的,需要有行和列。矩阵是 R语言中使用较多的一种数据结构,矩阵分为数值矩阵和字符串矩阵,常用的是数据矩阵,基因的表达数据为数值矩阵。矩阵有两大作用,一个是用来计算相关性,另外可以用来绘制热图。

5.1 创建矩阵

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
state.x77   
m <- matrix(1:20,nrow = 4,ncol = 5)
rowSums(state.x77)
apply(state.x77,1,,sum)

colMeans(state.x77)
apply(state.x77,2,mean)
apply(state.x77,2,var)
apply(state.x77,2,max)
?apply
cor(state.x77)

dim(state.x77)
rownames(state.x77)
colnames(state.x77)

5.2 矩阵索引

矩阵属于二位数据,需要给定行列的。

1
2
3
4
5
6
7
state.x77 
state.x77[1,2]
state.x77[1,]
state.x77["Alabama",]
state.x77[,"Population"]
#取奇数列
state.x77[,c(T,F)]

5.3 利用矩阵绘制热图

R非常擅长基于矩阵数据绘制热图,基础包中的 heatmap()可以直接绘制热图,gplots 包 heatmap.2()也可以绘制热图,pheatmap包 pheatmap()函数可以绘制更加优雅的热图,ComplexHeatmap包 可以绘制复杂的热图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
example("heatmap") 
m <- read.csv("Rdata/heatmap.csv",header = T,row.names = 1)
class(m)
x <- as.matrix(m)
heatmap(x)
heatmap(t(x))
heatmap(x,col=c("green","red"))
yanse <- colorRampPalette(c("red","black","green"))(nrow(x))
heatmap(x,col=yanse)
heatmap(x,col=yanse,RowSideColors = yanse)
heatmap(x,col=yanse,ColSideColors =
colorRampPalette(c("red","black","green"))(ncol(x)))
heatmap(x,col=yanse,Rowv = NA)
heatmap(x,col=yanse,Rowv = NA,Colv = NA)
heatmap(state.x77)
heatmap(state.x77,scale = "col")

利用 pheatmap绘制热图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#install.packages("pheatmap") 
library(pheatmap)
x <- read.csv("Rdata/heatmap.csv",header = T,row.names = 1)
class(x)
pheatmap(x)
annotation_col <-
data.frame(CellType=factor(rep(c("N1","T1","N2","T2"),each=5)))
rownames(annotation_col) <- colnames(x)
pheatmap(x,annotation_col = annotation_col)
pheatmap(x,annotation_col = annotation_col,display_numbers = T)
pheatmap(x,annotation_col = annotation_col,display_numbers = T,number_format =
"%.2f")
pheatmap(x,annotation_col = annotation_col,display_numbers = T,number_format =
"%.1f",number_color = "black")

6 数据框

数据框是一种表格式的数据结构,属于一种二维表,分为行和列。数据框旨在模拟数据集,与其他统计软件例如 SAS或者 SPSS中的数据集的概念一致。数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量。不同的行业对于数据集的行和列叫法不同。在一个数据框中,每一行的元素个数相同,每一列元素个数也相同,每一列的数据类型一致,都为一个向量,每一行内容还是一个数据框。数据框是 R中使用最广泛的一种数据格式。

6.1 创建数据框

1
2
3
4
5
6
7
8
9
10
11
mtcars   
iris
adata <- data.frame(state.name,state.division,state.area)
View(adata)
str(adata)
head(adata)
tail(adata)

dim(adata)
rownames(adata)
colnames(adata)

6.2 数据框索引

  • 中括号
  • 名称
  • dollar符
  • 逻辑值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
euro[1:3]   
euro[-(1:3)]
euro["ATS"]
mtcars[1:4,1:5]
mtcars[c(2,3,4,5)]
mtcars$mpg
mtcars["Mazda RX4",]

x <- runif(100,min = 1,max = 100)
x[x>50]
x [x>20 & x <40]

####逻辑判定符号:&, |, ==, !=


6.3利用 R实现 vlookup 案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#Excel函数:=VLOOKUP($A2,Sheet1!$A$1:$I$201,COLUMN(Sheet1!A2),FALSE) 

#读入 200个基因的列表 bigtable
genes200 <- read.csv("Rdata/200genes.csv",header = T,stringsAsFactors = F)

#读入 121个基因的 list small list
genes121 <- read.csv("Rdata/121genes.csv",header = T,stringsAsFactors = F)
head(genes200)
head(genes121)
genes200["CLU",]

#修改 gene table行名
rownames(genes200) <- genes200$gene
genes200["CLU",]
genes200[c("CLU","DCN"),]
#去除重复 gene ID
gene93 <- unique(genes121$gene)
#利用数据框的访问功能,一次实现 Excel Vlookup功能
dta <- genes200[gene93,]
dta
#数据中包含没有检索到的 gene ID,返回值为 NA,利用 na.omit删除包含 NA的行
dta <- na.omit(dta)
dim(dta)
rownames(dta) <- 1:nrow(dta)
write.csv(dta,file = "Rdata/gene86.csv",row.names = F)

7 缺失数据

缺失信息问题在数据科学中非常常见。在大规模数据采集过程中,几乎不可能每次都得到完整的数据,那么该如何处理缺失数据呢?首先我们要清楚为何会出现缺失数据,一种可能是机器断电,设备故障导致某个测量值发生了丢失。或者测量根本没有发生,例如在做调查问卷时,有些问题没有回答,或者有些问题是无效的回答等,这些都算作缺失值。对于缺失信息,R中提供了一些专门的处理方法。
在 R中,NA代表缺失值,NA是不可用,not available的简称,用来存储缺失信息。这里缺失值 NA表示 没有,但注意没有并不一定就是 0,NA是不知道是多少,也能是 0,也可能是任何值,缺失值和值为零是完全不同的。

1
2
3
4
5
6
7
8
9
x <- c(1:10,NA) 
sum(x)
sum(x,na.rm = T)
is.na(x)
#install.packages("VIM")
library(VIM)
help(packages="VIM")
data(sleep,package = "VIM")
na.omit(sleep)

8 列表

列表就是一些对象的有序集合。列表中可以存储若干向量、矩阵、数据框,甚至其他列表的组合。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
state.center
length(state.center)
names(state.center)
state.center$x

alist <- list(euro,state.x77,iris)

###列表与数据框的选取
##有名称时用$
state.center$x
#选取出来的是列表的第一个元素的具体内容,这个是个向量
class(state.center$x)
is.vector(state.center$x)
##也可以按照位置选取,注意[1]与[[1]]的区别
state.center[1]#选取出来的是列表中的第一个元素,还是列表
state.center[[1]]#选取出来的是列表的第一个元素的具体内容,这个是个向量

##无名字只能按照位置选取
alist <- list(euro,state.x77,iris)
names(alist)#null,没有名字
alist[1] #选取出来的是列表中的第一个元素,还是列表
class(alist[1])

alist[[1]] #选取出来的是列表的第一个元素的具体内容,这个是个向量
class(alist[[1]])
is.vector(alist[[1]])

9 因子

所有的数据集合可以分为三类,连续型,名义型和有序型。连续型例如1 2 3 4 5 8 9 10,名义型如sample1 sample2 sample3 ,而有序型 good better best;周一,周二,周三……等。在R中名义型变量和有序性变量称为因子,factor。这些分类变量的可能值称为一个水平level,由这些水平值构成的向量就称为因子。因子主要用于计算频数,可以用来分组。可以通过factor()函数中的labels选项对因子的值进行批量修改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
state.division
class(state.division)
str(state.division)
state_division <- state.division
length(state_division)
levels(state_division)
table(state_division)
par(mar=c (10,4.1,4.1,2.1))
barplot(table(state_division),las=3,cex.axis=1)
dev.off()

afactor <- factor(c("blue","red","red","green","red","blue"),levels = c("red",
"green","blue","yellow"))
bfactor <- factor(letters[1:5], labels = c("one","two","three","four","five"))