生命科学学院 生物信息学实验室 冯聪 ventson@zju.edu.cn 03/18, 2019 Hangzhou
R语言简介 来源 R是S语言的一种实现。S语言是由 AT&T贝尔实验室开发的一种用 来进行数据挖掘、统计分析、作图的解释型语言。最初S语言的实 现版本主要是S-PLUS。S-PLUS是一个商业软件,它基于S语言, 并由MathSoft公司的统计科学部进一步完善。 1995年由新西兰Auckland大学统计系的Robert Gentleman和 Ross Ihaka,编写了一种能执行S语言的软件,并将该软件的源代 码全部公开,这就是R软件,其命令统称为R语言。 R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的 一个自由、免费、开源的软件,它是一个用于统计计算和统计制图 的优秀工具。 R主页 http://www.r-project.org/ CRAN(软件及安装包) http://cran.r-project.org/mirrors.html
R语言简介 R软件下载及安装 本次课程使用R软件版本为R-3.5.2 下载镜像-中国清华镜像网站 https://mirrors.tuna.tsinghua.edu.cn/CRAN/
R语言简介 控制台界面 菜单栏 快捷按钮 命令行
R语言基本操作 R数据类型 基础数据类型 结构化数据 数值型 Numeric 如 100, 0, -4.335 复数型 Complex 如 1+2i 字符型 Character 如 “China” 逻辑型 Logical 如 TRUE, FALSE 向量(vector) 一系列相同类型元素组成的一维数组; 矩阵(matrix) 矩阵是由相同类型元素组成的二维数组; 数组(array) 数组与矩阵类似,但维度可以大于2; 因子(factor) 类别和有序类别型变量; 数据框 是由一个或几个向量和(或)因子构成,它们必须是等长的, (data.frame) 但可以是不同的数据类型;(最常用) 列表(list) 列表可以包含任何类型的对象。 使用变量的时候要特 别注意,R对大小写敏感!变量不能以数字开始。
R语言基本操作 基本运算符 数学运算 运算后给出数值结果 +, -, *, /, ^ , %%, %/%, %*% 比较运算 运算后给出判别结果(TRUE FALSE) >, <, <=, >=, ==, != 逻辑运算 与、或、非 !, &, &&, |, || 赋值符 = 或 <- 注释 #(不支持多行注释)
R语言基本操作 向量创建 > character <- c("China", "Korea", "Japan", "UK", "USA", “France”, “India”, “Russia”) #字符型 #按Tab键自动补齐 > numeric <- c(1, 2, 3, 6, 7, 8, 4, 5) #数值型 > factor <- factor(c(“male”, “female”)) #因子型 > logical <- c(T, T, T, F, F, F, T, T) #逻辑型 > rep(2,times=4) #重复数列 > rep(1:2,c(10,15)) > seq(from=3, to=21, by=3 ) #等差数列 > runif(10, min = 0, max= 1) #随机数 > rnorm(10, mean = 0, sd = 1) #随机数(符合正态分布)
R语言基本操作 矩阵创建 应用函数:dim()和matrix() cbind() # 按列组合成矩阵 ( rbind() 按行 ) > dim(x) <- c(3,4) [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 > x <- matrix(1:12,nrow=3,byrow=T) > t(x) #转置 > a <- c(1:5) > b <- c(2:6) > c <- c(3:7) > cbind(a, b, c) a b c [1,] 1 2 3 [2,] 2 3 4 [3,] 3 4 5 [4,] 4 5 6 [5,] 5 6 7 为行或列添加名称 > row.names() #rownames() > col.names() #colnames()
R语言基本操作 数据框创建 > a <- c(1:5); b <- c(2:6); c <- c(3:7) > d <- data.frame(a, b, c) > d a b c 1 1 2 3 2 2 3 4 3 3 4 5 4 4 5 6 5 5 6 7 #数据框取值 > d[1, 2] [1] 2 > d[, 2] [1] 2 3 4 5 6 > d$b > d1 <- data.frame(d, c1 = c(4:8)) #增加一列数据 > d1 a b c c1 1 1 2 3 4 2 2 3 4 5 3 3 4 5 6 4 4 5 6 7 5 5 6 7 8
R语言基本操作 列表创建 > lst$grade$math [1] 90 > lst[[4]]$math 创建列表 > lst <- list(name = "Donald", age = 69, gender = factor("male"), grade = data.frame(math = 90, English = 91)) > lst $name [1] "Donald" $age [1] 69 $gender [1] male Levels: male $grade math English 90 91 列表取值 > lst$grade$math [1] 90 > lst[[4]]$math 列表赋值 >lst$gender <- factor(“male”, levels = c(“female”, “male”)) #更改levels >lst$grade <- data.frame(lst$grade, biology = 89) #给数据框增加一列
R语言基本操作 数据类型判断及转换 对象类型判断 > mode() #元素类型 > class() #变量类型 > is.numeric() #返回值为TRUE或FALSE > is.logical() #返回值为TRUE或FALSE > is.charactor() #返回值为TRUE或FALSE > is.data.frame() #返回值为TRUE或FALSE 对象类型转换 > as.numeric() #转换为数值型 > as.logical() #转换为逻辑型 > as.charactor() #转换为字符型 > as.matrix() #转换为矩阵 > as.dataframe() #转换为数据框 > as.factor() #转换为因子
R语言基本操作 特殊数据类型 NA 缺失值 NaN 无意义数据 -Inf 负无穷 Inf 正无穷 > x <- c(NA, 1:3, -1:1/0) > x [1] NA 1 2 3 -Inf NaN Inf > is.na(x) [1] TRUE FALSE FALSE FALSE FALSE TRUE FALSE > is.finite(x) [1] FALSE TRUE TRUE TRUE FALSE FALSE FALSE > is.infinite(x) [1] FALSE FALSE FALSE FALSE TRUE FALSE TRUE > is.nan(x) [1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE
R语言基本操作 R帮助函数
R语言基本操作 管理工作空间
R语言基本操作 文本输出 重定向文本输出sink()函数(图形输出用pdf(), png(), svg()等函数) > sink("test.txt") > x <- c(NA, 1:3, -1:1/0); x > sink() > x [1] NA 1 2 3 -Inf NaN Inf > dir() [1] "gene_fpkm_all.csv" "hair follicle cycle genes.csv" "hair_cycle_genes.tsv" [4] "hair_cycle_go.txt" "stem_d1.txt" "test.txt" > read.table("test.txt", header = FALSE) V1 V2 V3 V4 V5 V6 V7 V8 1 [1] NA 1 2 3 -Inf NaN Inf > file.remove("test.txt") [1] TRUE
R语言基本操作 文件导入和导出 导出对象var到test.txt文件 write.table(var, file = “test.txt”, row.names = FALSE, sep = “\t”, quote = FALSE) 读入txt文件 read.table(file, header = FALSE, sep = “\t”) # 对于Excel文件,可以先转换为csv文件,再读入 read.csv(), write.csv()
R语言统计分析 基本统计 summary() apply()或sapply() 典型函数:mean()、sd()、var()、min()、max()、 median()、length()、range()和quantile() summary() summary()函数提供了最小值、最大值、四分位数和数值型变量 的均值,以及因子向量和逻辑型向量的频数统计 apply()或sapply() sapply(x, FUN, options)
R语言统计分析 部分统计函数 计算 log(x) log10(x) exp(x) sin(x) cos(x) tan(x) asin(x) acos(x) min(x) max(x) range(x) length(x) 统计检验 mean(x) sd(x) var(x) median(x) quantile(x,p) cor(x,y) t.test() lm(y ~ x) wilcox.test() kruskal.test() 统计检验 lm(y ~ f+x) lm(y ~ x1+x2+x3) bartlett.test binom.test fisher.test chisq.test glm(y ~ x1+x2+x3, binomial) friedman.test
R语言绘图 基本绘图函数 plot() 绘制散点图等多种图形 hist() 直方图 boxplot() 箱线图 stripchart() 点图 barplot() 条形图 dotplot() 点图 piechart() 饼图 散点图与箱线图举例
R语言绘图 基本绘图函数及参数 基本图形元素函数 功能 lines() 添加线 curve() 添加曲线 abline() 添加给定斜率的线 points() 添加点 segments() 折线 arrows() 箭头 axis() 坐标轴 box() 外框 title() 标题 text() 文字 … 绘图参数 功能 font 字体 lty 线类型 lwd 线宽度 pch 点类型 col 颜色 xlab 横坐标 ylab 纵坐标 xlm 横坐标范围 ylm 纵坐标范围 …
R语言包的安装及使用 CRAN R可以通过可选模块(包)的下载和安装满足各种需求。 使用网络镜像安装 本地安装 载入包 http://cran.r-project.org/web/packages 使用网络镜像安装 chooseCRANmirror() Install.packages(“PackageName”) 本地安装 在CRAN网站上下载所需包,使用install.packages(“path_to_zip”) 载入包 library(“PackageName”)
R语言包的安装及使用 Bioconductor 现在已经有1649个packages #bioconductor 软件安装方式 >chooseBioCmirror() #China Anhui >source("http://www.bioconductor.org/biocLite.R") >biocLite("PackageName")
R语言基本操作 参考书籍 R for Beginners R in action R Cookbook ggplot2. Elegant Graphics for Data analysis
R语言基本操作 练习 创建如下数据框并输出到csv文件 对以上数据框进行简单统计分析 尝试安装以下软件包 ID Name Math English 1 101 John 70 90 2 102 Mary 96 98 3 103 Sherlock 100 90 4 104 Jim 99 92 5 105 Molly 66 73 对以上数据框进行简单统计分析 尝试安装以下软件包 pheatmap(CRAN), DESeq2(Bioconductor)
R语言在转录组分析中的应用 数据 步骤 data/countMatrix.csv(count矩阵) diff_exp_results.csv(差异表达分析结果) 步骤 数据导入和查看 数据过滤 排序 选取显著子集 数据整合 简单作图
R语言与转录组 数据导入和查看 > setwd(“D:/data”) 导入csv数据 > countMatrix <- read.csv("countMatrix.csv", row.names = "X") > head(countMatrix) C1 C2 C3 T1 T2 T3 MSTRG.28358.2 0 0 0 0 0 0 MSTRG.28358.3 0 0 0 0 0 6 LOC102181384 6 1 9 8 4 6 MSTRG.14117.1 8 0 4 24 1 0 MSTRG.29225.1 0 1 1 0 0 0 MSTRG.6928.10 0 0 0 0 0 0
R语言与转录组 数据过滤 过滤未注释基因(grep()) > countMatrix_filter <- countMatrix[- grep("MSTRG", rownames(countMatrix)), ] > head(countMatrix_filter) C1 C2 C3 T1 T2 T3 LOC102181384 6 1 9 8 4 6 LOC102179991 0 0 0 0 0 0 LOC102179993 289 150 295 0 75 64 LOC102179999 663 349 520 205 203 187 LOC108634036 2 4 0 13 4 2 LOC108634035 138 48 181 136 120 91 过滤低表达基因(which()) > countMatrix_filter_low <- countMatrix_filter[- which(rowSums(countMatrix_filter) < 10), ] > head(countMatrix_filter_low) C1 C2 C3 T1 T2 T3 LOC102181384 6 1 9 8 4 6 LOC102179993 289 150 295 0 75 64 LOC102179999 663 349 520 205 203 187 LOC108634036 2 4 0 13 4 2 LOC108634035 138 48 181 136 120 91 LOC108634034 178 81 74 32 23 22
R语言与转录组 排序 导入差异表达分析结果diff_exp_results.csv并查看 根据padj值从小到大排序(order()) > res <- read.csv("diff_exp_results.csv", row.names = "X") > head(res) baseMean log2FoldChange lfcSE stat pvalue padj LOC102181384 5.708624 0.1981462 0.5449477 0.3636059 7.161523e-01 0.958971010 LOC102179993 136.705319 -0.7142030 0.5283680 -1.3517152 1.764664e-01 0.694642950 LOC102179999 331.191246 -0.9296149 0.3123082 -2.9765944 2.914693e-03 0.096923705 LOC108634036 3.988827 0.6837456 0.5247847 1.3029069 1.926066e-01 0.710774645 LOC108634035 118.783445 0.1286635 0.4753086 0.2706946 7.866259e-01 0.972333567 LOC108634034 59.606283 -1.5067266 0.3591658 -4.1950724 2.727845e-05 0.003280661 根据padj值从小到大排序(order()) > res_order <- res[order(res$padj), ] > head(res_order) baseMean log2FoldChange lfcSE stat pvalue padj HBEGF 321.7883 -6.732800 0.4543001 -14.820159 1.085280e-49 1.995071e-45 SPAG1 360.4679 -6.629362 0.4637788 -14.294234 2.377080e-46 2.184893e-42 NELFCD 1424.4212 2.585984 0.1996308 12.953833 2.235089e-38 1.369588e-34 INAFM1 281.6439 5.199195 0.4332939 11.999235 3.585938e-33 1.648007e-29 CUL4A 3032.0994 -3.073113 0.2868787 -10.712238 8.917954e-27 3.278775e-23 CACTIN 687.7857 2.357203 0.2393169 9.849715 6.873895e-23 2.006544e-19
R语言与转录组 选取显著子集 以fold change大于2倍,校正后p值小于0.05为筛选条件(subset()) > res_significant <- subset(res_order, abs(log2FoldChange) >= 1 & padj <= 0.05) > nrow(res_significant) [1] 281 > nrow(res_order) [1] 19947 统计上调和下调基因数(sum()) > sum(res_significant$log2FoldChange < 0) [1] 159 > sum(res_significant$log2FoldChange > 0) [1] 122
R语言与转录组 数据整合 选取显著差异的基因,在countMatrix表中找出这些基因的count值 > genes_significant <- rownames(res_significant) > countMatrix_significant <- countMatrix[genes_significant, ] log10标准化count值 > countMatrix_significant_normalized <- log10(countMatrix_significant + 1) > head(countMatrix_significant_normalized) C1 C2 C3 T1 T2 T3 HBEGF 3.066699 2.7379873 2.775246 0.000000 0.000000 0.000000 SPAG1 2.954243 2.7972675 2.959041 0.000000 0.000000 0.000000 NELFCD 2.711807 2.6434527 2.582063 3.489114 3.260787 3.296665 INAFM1 0.698970 0.9542425 0.845098 2.794488 2.465383 2.794488 CUL4A 3.903524 3.7153347 3.772542 2.895975 2.603144 2.577492 CACTIN 2.525045 2.3673559 2.247973 3.176091 2.898725 2.990783
R语言与转录组 简单作图 样本分布箱线图 >boxplot(countMatrix_significant_normalized, col = rep(c("darkorange", "dodgerblue", "hotpink"), 2)) 差异表达基因热图 >library(pheatmap) >pheatmap(t(countMatrix_significant_normalized), show_colnames = FALSE, cluster_rows = FALSE)
Thank you