打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
R基础知识及快速检阅你的数据
userphoto

2022.04.30 广东

关注

 考虑到公众号后台数不胜数的提问其实并不是生物学知识或者数据处理知识的困惑,仅仅是绘图小技巧以及数据转换的困难。所以我们一再强调系统性掌握编程知识的重要性,在这个打基础方面我让实习生“身先士卒”,起码每个人在每个编程语言上面都需要看至少五本书而且每本书都需要看五遍以上,并且详细的记录笔记。

接下来我们就连载其中一个佼佼者的系统性学习五本书的笔记:

下面是YT的分享

❤️前言

WHY R?

本书在每一次R示例之前都要加载以下包。最好安装最新的R版本和ggplot2版本哦~~

install.packages('gccookbook')
library(gcookbook)
library(ggplot2)
library(dplyr)
library(tidyverse)

🙈第一章 R基础知识

第一章内容包括:安装包,使用包和加载数据

1.1 安装包

Q:什么是R包?

A:R中的包是一些为了便于分发而封装在一起的函数,数据的集合。安装包就可以扩展R的功能。而各位大佬在写好包后会心有灵犀的上传到R包的仓库,即CRAN,bioconductor等,以便于大家下载使用~~书中会多次使用tidyverse这个用于共享如何构建以及使用数据的R包合集,让大家更轻松地使用数据 ~~

Q:如何从CRAN 中安装包呢?

A:

#安装一个包
install.packages('ggplot2')
#安装多个包
install.packages('ggplot2','tidyverse')
#安装时,依赖的包也会被安装的

1.2加载包

Q: 如何加载已经安装好的包?

A: 使用library() 函数,在括号内直接添加加载包的名字。但是要注意包与库之间的区别,即库实际上是一个包含了若干包的目录。每个人或者系统都可以由自己的库~

library(ggplot2)

1.3更新包

Q: 如何更新包?

A:

#提示有哪些包可以更新
update.packages(,ask=F)
#使用ask=F,无需询问,一键更新

**注意:有些包更新以后可能会有一些行为的变化,或者直接bug......

1.4加载以符号分隔的文本文件

Q: 如何加载一个以符号分隔的文本文件中的数据?

A:

##读取文件中逗号分隔组(Comma-Seperated Value, CSV)数据---------------------------------
##1.read.csv()
data <- read.csv('datafile.csv')
#header=F时将没有列名,得到的列名会变成V1,V2...,重新命名要手动命名
data <- read.csv('datafile.csv',header=F)
names(data) <- c('Column1','Column2','Column3')
#使用sep参数设置分隔符,空格分隔使用sep='',制表符分隔使用sep='\t'
data <- read.csv('datafile.csv',sep='\t')
#默认条件下所有的字符串会设置为因子factor(额,现在好像会直接设置为字符串了),可以设置stringsAsFactors = F避免此现象
#若有的列视为因子则需单独转换
data <- read.csv('datafile.csv',stringsAsFactors = F)
data$Sex <- as.factor(data$Sex)

##2.readr:更快且更适合处理字符串,日期以及时间
library(readr)
read_csv()

若data为

read.csv是对read.table的封装函数,如果希望更详细的了解不同设定如设置行名,最大读取行数等等可以使用

?read.csv~~

1.5从Excel中加载数据

Q: 如何从Excel中加载数据?

A:

##使用readxl中的read_excel()函数---------------------------------------------------------
install.packages('readxl')
library(readxl)
data <- read_excel('datafile.xlsx',sheet=1)#此处sheet=设置读取sheet序号或者名称
#如果不想使用第一列为行名则设置col_names=F,列名会设置为x1,x2.....
#重新规定每一列的类型使用col_types=参数,也可以设置为blank丢弃它
data <- read_excel('datafile.xlsx',col_names = T,col_types=c('text','text','text','numeric'))

使用?read_excel来diy自己的数据

除此之外其余包如gdata包的函数read.xls()能够读取.xls数据(需要安装JAVA)

xlsx包的函数read.xlsx()能够读取.xlsx数据(需要安装Perl)

1.6 从SPSS/SAS/Stata文件中加载数据

Q: 如何从SPSS/SAS/Stata文件中加载数据?

A:

install.packages('haven')
library(haven)
data <- read_sav('default.sav')

*haven包还能读取其他格式的文件:

read_sas()-------SAS

read_dta()-------Stata

*可以使用foreign包替代haven包,其同样支持SPSS和Stata文件,但是其支持Stata12之前的文件版本

foreign包:

read.octave()-------Octave和MATLAB

read.systat()-------SYSTAT

read.xport()-------SAS XPORT

read.dta()-------Stata

read.spss()-------SPSS

*输入ls('package:foreign')查看foreign包中所有的函数

1.7链接函数和管道操作符%>%

Q: 如何以一种易读的形式调用一个函数并且将结果传递给另一个函数?

A: 使用管道符%>%

library(dplyr)
head(morley)#加载数据集,其中为Michelson在1879年测定的光速数据,其中有20个连续的runs
Expt Run Speed
001 1 1 850
002 1 2 740
003 1 3 900
004 1 4 1070
005 1 5 930
006 1 6 850
morley %>% filter(Expt==1) %>% summary()
#将morley中Expt等于1的部分过滤出来后总结统计结果
#如果不使用管道则会变成:
summary(filter(morley,Expt==1))
#这样可读性就很低了

#tidyverse中的很多函数都可以随意的调用以及拼接,如
x %>% f() = f(x)
x%>% f() %>% g() %>% h() = h(g(f()))
#如果还设置了参数,则参数应该移到操作符右侧,管道实际上来自于magrittr包,但是dyplr也使用了管道

🙊第二章:快速浏览数据

简单的函数我们经常使用R基础包中的绘图函数,但是如果图形更复杂,ggplot2就会成为更好的选择。这是因为其提供了一个统一的接口和若干选项来代替基础绘图系统中对图的缝缝补补。本章主要帮助我们从基础绘图过度到ggplot2之中。

2.1绘制散点图

Q: 如何绘制散点图?

A:

1.使用plot函数依次输入x,y向量

plot(mtcars$wt,mtcars$mpg)
#mtcars数据来自于1974年的美国《汽车趋势》杂志,包含了32辆汽车(1973-74车型)的油耗和10个方面的汽车设计和性能。
head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1

#

2.使用ggplot2绘制散点图

library(ggplot2)
ggplot(mtcars, aes(x= wt, y= mpg))+geom_point()
#这里的第一部分ggplot2创建绘图对象,将数据框传递给该函数,并设置x,y
#第二部分geom_point()对图像中加一层点

2.2绘制折线图

Q: 如何绘制折线图?

A:

1.plot()函数绘制折线图依次输入x,y向量,并设置type='l’(line)

#pressure数据集记载了温度与水银压力(mm)的关系
plot(pressure$temperature,pressure$pressure,type = 'l')
points(pressure$temperature,pressure$pressure)
#通过points()和lines()函数添加数据点和更多折线
lines(pressure$temperature,pressure$pressure/2,col='red')
points(pressure$temperature,pressure$pressure/2,col='red')

2.使用ggplot2绘制折线图

ggplot(pressure,aes(x=temperature,y=pressure))+geom_line()+geom_point()
#使用geom_line()得到类似的结果

*使用ggplot时会经常使用+将命令分割成很多行,使R知道代码还没有结束

2.3 绘制条形图

Q: 如何绘制条形图?

A:

1.使用barplot(),并传递两个参数,其中第一个用来设定条形图的高度。第二个设置每一个条形对应的标签,若向量中的元素已被命名则自动使用元素的名字作为条形标签

head(BOD)#BOD数据记载了BOD与时间的关系
Time demand
1 1 8.3
2 2 10.3
3 3 19.0
4 4 16.0
5 5 15.6
6 7 19.8
barplot(BOD$demand,names.arg = BOD$Time)

有时候条形图表示的使分组数据中各个数据的频数,这种条形图和频数图很类似,不过x轴为离散的取值,此时可以使用table函数

table(mtcars$cyl)
4 6 8
11 7 14
barplot(table(mtcars$cyl))

2.使用ggplot2绘制条形图

#变量值的频数表,使用BOD数据,时间为x值,demand为y值,使用geom_col()函数
ggplot(BOD,aes(x=BOD$Time,Y=BOD$demand))+geom_col()
#将x转化为因子型向量从而使系统视其为离散值
ggplot(BOD,aes(x=factor(Time),Y=BOD$demand))+geom_col()
#变量值的频数表,使用mtcars数据,cyl为x值,cyl各取值的数量为y值,此时使用geom_bar()函数
ggplot(mtcars,aes(x=mtcars$cyl))+geom_bar()
ggplot(mtcars,aes(x=factor(cyl)))+geom_bar()

*旧版ggplot2使用geom_bar(stat='identity')创建条形图

新版可使用geom_col()代替

2.4绘制直方图

Q: 如何绘制直方图查看一维数据的分布特征?

A:

1.hist()函数绘制直方图

hist(mtcars$mpg,breaking=10)#通过breaks参数指定组距

2.使用ggplot2绘制直方图

ggplot(mtcars,aes(x=mpg))+geom_histogram()#默认的组距为30
ggplot(mtcars,aes(x=mpg))+geom_histogram(binwidth = 4)

2.5绘制箱型图

Q: 如何绘制箱型图以对不同分布进行比较?

A:

1.plot()函数绘制箱型图

##plot()--------------------------------------------------------------------------
#当为plot传递两个变量x,y,且x为因子型变量则默认绘制箱型图
head(ToothGrowth)
len supp dose
1 4.2 VC 0.5
2 11.5 VC 0.5
3 7.3 VC 0.5
4 5.8 VC 0.5
5 6.4 VC 0.5
6 10.0 VC 0.5
#在60只豚鼠体内,成牙细胞(负责牙齿生长的细胞)的长度会产生反应。
#每只动物分别通过橙汁或抗坏血酸(维生素C的一种形式,代号为VC)两种给药方式中的一种,接受三种剂量水平的维生素C(每天0.5、1和2毫克)中的一种。
plot(ToothGrowth$supp,ToothGrowth$len)
  1. 当两个参数向量在同一个数据框中时,使用boxplot(),其允许我们在x轴上使用变量 组合

#公式语法
boxplot(len~supp,data=ToothGrowth)
#在x轴引用两个变量的交互
boxplot(len~supp+dose,data=ToothGrowth)

3.ggplot2绘制箱线图

#基础画法
ggplot(ToothGrowth,aes(x=supp,y=len))+geom_boxplot()
#使用interaction()函数制作多变量的箱线图
ggplot(ToothGrowth,aes(x=interaction(supp,dose),y=len))+geom_boxplot()

*为何ggplot2和基础画图不太一样??

boxplot:当箱线图分布值长度为奇数时,箱线图的下,上边缘分别为一分位和三分位。若为偶数则有余数决定。只有任意n/4的余数为1或者2,那么分位数等于观察值,否则则为两观察值的中间数。

若notch = TRUE则其延申于 +/-1.58 IQR/sqrt(n),此数值注重中位数的比较,结果基于 Chambers et al (1983, p. 62), given in McGill et al (1978, p. 16)

ggplot:箱线图的下边缘与上边缘分别对应着一分位与三分位(25%,75%)。异常值为大于以及小于箱线图上下边缘IQR*1.5的位置。若notch = TRUE则更重视中位数之间的比较,公式为:

2.6绘制函数图像

Q: 如何绘制函数图像?

A:

1.使用curve()函数绘制图像

#绘制函数
curve(x^3-5*x,from=-4,to=4)
#自定以函数
myfun <- function(xvar){1/(1+exp(-xvar+10))}
curve(myfun(x),from=0,to=20)
#根据已有函数添加新的线型
curve(1-myfun(x),add=T,col='red')

2.使用ggplot2绘制函数

#geom_function()传入并返回一个数值向量
ggplot(data.frame(x=c(0:20)),aes(x=x))+stat_function(fun=myfun,geom='line')

若有收获,就点个赞吧

再怎么强调生物信息学数据分析学习过程的计算机基础知识的打磨都不为过,我把它粗略的分成基于R语言的统计可视化,以及基于Linux的NGS数据处理

把R的知识点路线图搞定,如下:

  • 了解常量和变量概念
  • 加减乘除等运算(计算器)
  • 多种数据类型(数值,字符,逻辑,因子)
  • 多种数据结构(向量,矩阵,数组,数据框,列表)
  • 文件读取和写出
  • 简单统计可视化
  • 无限量函数学习

写在文末

我在《生信技能树》,《生信菜鸟团》,《单细胞天地》的大量推文教程里面共享的代码都是复制粘贴即可使用的, 有任何疑问欢迎留言讨论,也可以发邮件给我,详细描述你遇到的困难的前因后果给我,我的邮箱地址是 jmzeng1314@163.com

如果你确实觉得我的教程对你的科研课题有帮助,让你茅塞顿开,或者说你的课题大量使用我的技能,烦请日后在发表自己的成果的时候,加上一个简短的致谢,如下所示:

We thank Dr.Jianming Zeng(University of Macau), and all the members of his bioinformatics team, biotrainee, for generously sharing their experience and codes.

十年后我环游世界各地的高校以及科研院所(当然包括中国大陆)的时候,如果有这样的情谊,我会优先见你。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【R分享|实战】科白君浅谈ggplot2包学习逻辑
「R」ggplot2数据可视化
R包介绍 || ggplot2包--R可视化(一)
R 数据可视化 - ggplot标度(二)
R语言绘制条形图
第三篇:R语言数据可视化之条形图
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服