image image image
问答社区:http://www.omicsclass.com/ 组学大讲堂公众号 生信课堂

image image image
课程推荐1:R语言入门与基础绘图 课程推荐2:R语言绘图(ggplot) 所有生信课程:点击

1 R语言简介

1.1 什么是R语言

R语言是于1991年由新西兰奥克兰大学的Robert Gentleman 和 Ross Ihaka 及其他志愿人员开发的一个语言系统。因为这两个开发者的名字都是以字母R开头,所以就叫做R语言,R是用于统计分析、绘图的语言和操作环境。

1.2 为什么选择R语言

1)专门为生物统计而生的语言

R的开发最初是要解决生物统计方面的问题,创始人之一的Robert Gentleman,就是一位生物学家。所以,R最开始就是用来做生物统计,这个人后来又开发Bioconductor包,专门用来收录与高通量测序生物数据分析相关包的数据库。目前Bioconductor已经收录了大量的生物数据分析相关的包,包括做转录组差异分析的常用包DEseq2,edgeR,芯片数据分析相关的limma、affy包等等,目前已经收录了1741包(截止2019.6.30)。当然R语言不止只有Bioconductor,还有CRAN也收录了很多R包。

2)开源免费

1995年, Martin Michler 说服Ross 和Robert在GNU这个许可证下授权,这使得R成为了一个免费的软件。R软件是一款非常优秀的数据分析软件,市面上也有很多其他流行的统计和绘图软件,例如微软公司的Excel,SAS,IBM 公司的SPSS,Stata,S-PLUS以及Matlab等。这些软件当中大多都是商业软件需要支付高昂的费用才能使用,而R语言则是免费的,R是一个全面的统计研究平台,提供了各式各样的数据分析技术,几乎可以完成任何类型的数据分析工作,并且R拥有顶尖的绘图功能,可以绘制非常专业精美的图形。

3)优秀的绘图功能

R语言为统计而生,而我们生物数据分析当中很多地方都需要用到统计分析,所以说掌握R语言是学生物学生的基本技能。数据在统计分析之后,最重要的就是要把结果可视化的展示出来,而R语言也有非常强大的绘图功能,很多高水平杂志当中漂亮的图都是应用R语言绘制的.

image

1.3 R语言入门书籍推荐

1)学习R

image

2)R语言编程艺术

image

3)R语言实战

读完前两本书,结合例子学习更佳: image

2 R语言安装环境搭建

2.1 安装R语言解释器

R语言解释器可根据自己的操作系统选择下载安装,选择中国的镜像地址下载速度快:

地址 说明
https://mirrors.tuna.tsinghua.edu.cn/CRAN/ TUNA Team, Tsinghua University
http://mirrors.tuna.tsinghua.edu.cn/CRAN/ TUNA Team, Tsinghua University
https://mirrors.ustc.edu.cn/CRAN/ University of Science and Technology of China
http://mirrors.ustc.edu.cn/CRAN/ University of Science and Technology of China
https://mirror-hk.koddos.net/CRAN/ KoDDoS in Hong Kong
https://mirrors.eliteu.cn/CRAN/ Elite Education
https://mirror.lzu.edu.cn/CRAN/ Lanzhou University Open Source Society
http://mirror.lzu.edu.cn/CRAN/ Lanzhou University Open Source Society
https://mirrors.tongji.edu.cn/CRAN/ Tongji University

具体下载地址: 目前最新版本4.4.0(2024.06.11),如果要下载最新版本,可以到上面网址查找最新版本下载。 最新版本 下载地址:https://mirrors.tuna.tsinghua.edu.cn/CRAN/

2.2 Rstudio 编辑器安装(推荐)

1)下载地址:

Rstudio 为R语言的专业编辑器,有代码的提示,高亮显示等等功能,强烈推荐使用,初学者根据自己的操作系统下载RStudio Desktop 免费版本就可以:

官方下载网址:https://www.rstudio.com/products/rstudio/download/

2)常见问题解答:

Rstudio中文乱码:http://www.omicsclass.com/article/294

3 R扩展包安装

3.1 R官方 CRAN(The Comprehensive R Archive Network)上的扩展包安装

install.packages("ggplot2")

#加快安装速度设置镜像
install.packages("ggplot2",repos="http://mirrors.tuna.tsinghua.edu.cn/CRAN/")

#可以设置全局镜像加快安装速度,推荐全局设置镜像,一些依赖包都可以默认这个镜像下载,安装更快:
local({r <- getOption("repos") 
r["CRAN"] <- "http://mirrors.tuna.tsinghua.edu.cn/CRAN/" 
options(repos=r)})

install.packages("ggplot2")

#多个包一起安装:
install.packages(c("poppr", "mmod", "magrittr", "treemap"), repos = "http://mirrors.tuna.tsinghua.edu.cn/CRAN/",dependencies = TRUE)

3.2 Bioconductor上扩展包安装

网站:https://www.bioconductor.org/

#设置国内的镜像地址,加快安装进度
options(BioC_mirror="https://mirrors.tuna.tsinghua.edu.cn/bioconductor")

#安装bioconductor中的包管理BiocManager,if如果没有安装则安装一下
if(!requireNamespace("BiocManager", quietly = TRUE)){
    install.packages("BiocManager")
}
#安装bioconductor中DESeq2这个包
BiocManager::install("DESeq2") 

3.3 github上扩展包安装

github上的包可以用devtools或者remotes包安装

install.packages("devtools")
devtools::install_github('cole-trapnell-lab/monocle3')


install.packages("remotes")                          # 首先安装 remote 包
remotes::install_github("GuangchuangYu/nCov2019")    # 尝试安装

安装笔记见:http://www.omicsclass.com/article/106

3.4 R包载入

library(ggplot2)
#或者
require(ggplot2)

#加载包时,如果报错说明包没有安装成功

3.5 R语言获取帮助

#获取帮助信息
?plot
example(plot)
?install.packages
??geto
#如果你还记得你的电脑中存在某个方法可以实现某些统计分析功能,但又想不起该方法属于哪个包时:
help.search("geto")

3.6 需要安装的包

#设置国内的镜像地址,加快安装进度
options(BioC_mirror="https://mirrors.tuna.tsinghua.edu.cn/bioconductor")

#安装bioconductor中的包管理BiocManager,if如果没有安装则安装一下
if(!requireNamespace("BiocManager", quietly = TRUE)){
  install.packages("BiocManager")
}
local({r <- getOption("repos") 
r["CRAN"] <- "http://mirrors.tuna.tsinghua.edu.cn/CRAN/" 
options(repos=r)})

install.packages("ggplot2")

4 R语言数据结构

4.1 R语言数据类型总结:

根据数据分析需求,选用不同的数据对象类型,包括:

  • 标量(Scalar) character ,integer, logical, double 等等
  • 向量(Vector)
  • 因子(Factor)
  • 矩阵(Matrix)
  • 数组(Array)
  • 列表(List)
  • 数据框(Data frame)

4.2 标量与向量

标量Scalar

R里面基础的数据类型包括:Scalar :character ,integer, logical, double

# "hello R "
# 44
# -32.43
# TRUE
# FALSE


x <- "my first R script"
y<- 1
z<-TRUE
x
## [1] "my first R script"
y
## [1] 1
z
## [1] TRUE
#关于字符串的一些操作方法

#连接字符串 - paste()函数
#使用方法
#paste(..., sep = " ")
#...表示要组合的任意数量的自变量。
#sep表示参数之间的任何分隔符。它是可选的。

a <- "Hello"
b <- 'How'
c <- "are you? "

变量的命名注意事项

  • 变量名称可包含英文字母(大小写字母)、数字、下划线和英文点号
  • 不能有中文、空格、- 存在
  • 不能以 数字、下划线、 #,开头必须是英文字母或者点
  • 不能与R中的保留关键字同名:table,rowSums,pi

R语言里面习惯用 . : avg.clicks

其他语言:avg_Clicks , avgClicks

变量赋值 = or <- or ->

  • 在R中,用赋值运算符<-来进行赋值运算。
  • 举个例子:表达式x <- 6的含义是将值6赋给变量x。 6->x 也可以
  • 也可以用=号:R语言的习惯尽量避免用=来进行赋值。
  • =等号赋值一般用于方法或者函数当中的参数赋值。

赋值符号区别:http://www.omicsclass.com/article/722

向量Vector

向量就像excel里面的一行,每个格子里面可以放一个标量

a<-c(1,2,3,4,5)
b<-c("one","two","three")
c<-c(TRUE,TRUE,FALSE)
d<-1:100
a
## [1] 1 2 3 4 5
b
## [1] "one"   "two"   "three"
c
## [1]  TRUE  TRUE FALSE
d
##   [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18
##  [19]  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36
##  [37]  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54
##  [55]  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72
##  [73]  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90
##  [91]  91  92  93  94  95  96  97  98  99 100
#如果其中一个元素是字符,则非字符值被强制转换为字符类型。
s <- c('apple','red',5,TRUE)
print(s)
## [1] "apple" "red"   "5"     "TRUE"
rep(1:4,each=2)
## [1] 1 1 2 2 3 3 4 4
seq(from=22,to=50,by=3)
##  [1] 22 25 28 31 34 37 40 43 46 49
#或者
seq(22,44,2)
##  [1] 22 24 26 28 30 32 34 36 38 40 42 44
#向量的操作
#1.索引获取向量中的值
a<-1:10
a[1]
## [1] 1
a[2]
## [1] 2
a[1:3]
## [1] 1 2 3
a[c(1,4,3,7)]
## [1] 1 4 3 7
#2.逻辑筛选获得想要的值 
a>3
##  [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
a3<-a[a>3]

#名字筛选对应的值
letters
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
letters[1:10]
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
names(a)<-letters[1:10]
a
##  a  b  c  d  e  f  g  h  i  j 
##  1  2  3  4  5  6  7  8  9 10
a["b"]
## b 
## 2
#向量值的修改
a
##  a  b  c  d  e  f  g  h  i  j 
##  1  2  3  4  5  6  7  8  9 10
a[5]<-33
a
##  a  b  c  d  e  f  g  h  i  j 
##  1  2  3  4 33  6  7  8  9 10
a[1:3]<-1
a
##  a  b  c  d  e  f  g  h  i  j 
##  1  1  1  4 33  6  7  8  9 10
a[a>3]<-55
a
##  a  b  c  d  e  f  g  h  i  j 
##  1  1  1 55 55 55 55 55 55 55
a[a>3]<-NA
a
##  a  b  c  d  e  f  g  h  i  j 
##  1  1  1 NA NA NA NA NA NA NA

4.3 向量运算

可以添加,减去,相乘或相除两个相同长度的向量,将结果作为向量输出。

R里面的算术运算符

  • 基本算术运算符:加(+),减(-),乘(*),除(/),负数(-)
  • 幂运算:^ 或 **
  • 整除操作符%/%,求余运算 %%
# 创建两个向量
v1 <- c(3,8,4,5,0,11)
v2 <- c(4,11,0,8,1,2)

# 向量相加
add.result <- v1+v2
add.result
## [1]  7 19  4 13  1 13
# 向量相减
sub.result <- v1-v2
sub.result
## [1] -1 -3  4 -3 -1  9
# V向量的乘法
multi.result <- v1*v2
multi.result
## [1] 12 88  0 40  0 22
# 向量除法
divi.result <- v1/v2
divi.result
## [1] 0.7500000 0.7272727       Inf 0.6250000 0.0000000 5.5000000
#向量比较操作符,当然标量也可以比较
#>、<、>=、<=、==、!= 

x<-c(3,4,9,3,424,63,2,5,1,1)
y<-c(2,3,3,3,5,8,9)
length(x)
## [1] 10
length(y)
## [1] 7
x>4
##  [1] FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE  TRUE FALSE FALSE
x>y
## Warning in x > y: longer object length is not a multiple of shorter object
## length
##  [1]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE FALSE FALSE
#向量元素循环利用
#如果我们对不等长的两个向量应用算术运算,则较短向量的元素被循环以完成操作。

v1 <- c(3,8,4,5,0,11)
v2 <- c(4,11)
# V2 becomes c(4,11,4,11,4,11)

add.result <- v1+v2
add.result
## [1]  7 19  8 16  4 22
sub.result <- v1-v2
sub.result
## [1] -1 -3  0 -6 -4  0

4.4 因子

因子(Factors),因子的创建方法用factor().

diabetes<-c("T1","T1","T2","T3")
diabetes
## [1] "T1" "T1" "T2" "T3"
diabetes<-factor(diabetes)
diabetes
## [1] T1 T1 T2 T3
## Levels: T1 T2 T3
#指定有序因子

status<-c("Poor","Improved","Excellent","Poor")
status<-factor(status)
status
## [1] Poor      Improved  Excellent Poor     
## Levels: Excellent Improved Poor
status<-c("Poor","Improved","Excellent","Poor")
status<-factor(status,order=TRUE)
status
## [1] Poor      Improved  Excellent Poor     
## Levels: Excellent < Improved < Poor
status<-c("Poor","Improved","Excellent","Poor")
status<-factor(status,order=TRUE,levels=c("Poor","Improved","Excellent"))
status
## [1] Poor      Improved  Excellent Poor     
## Levels: Poor < Improved < Excellent
###因子的用处:给数据分组, 适用不同的统计方法(后面课程会详细说明)

nlevels(status)
## [1] 3
levels(status)
## [1] "Poor"      "Improved"  "Excellent"

4.5 矩阵 matrix

方法matrix()用于创建一个矩阵,矩阵数据类型只能是一种

y<-matrix(1:12,nrow=3,ncol=4)
y
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
y<-matrix(1:12,nrow=3,ncol=4,byrow = TRUE)
y
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
#数组  数组和矩阵类似
z<-array(1:24, c(3,4,2)) 
z
## , , 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   13   16   19   22
## [2,]   14   17   20   23
## [3,]   15   18   21   24

4.6 数据框data.frame

数据框,重点

数据框与矩阵类似,也是二维的。与矩阵不同的是,数据框中各列的数据类型可以不同,但长度必须相同。

#创建方法:data.frame
patientID<-c(1,2,3,4)
age<-c(22,33,43,24)
diabetes<-c("t1","t2","t1","t1")
status=c("Poor","Improved","Excellent","Poor")
status=factor(status,order=TRUE,levels=c("Poor","Improved","Excellent"))

patientData<-data.frame(patientID,age,diabetes,status)
patientData
############################
#data.frame 常用方法
###########################

#获取数据框一些属性的方法
mtcars
head(mtcars)
tail(mtcars)
colnames(mtcars)
##  [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"
## [11] "carb"
rownames(mtcars)
##  [1] "Mazda RX4"           "Mazda RX4 Wag"       "Datsun 710"         
##  [4] "Hornet 4 Drive"      "Hornet Sportabout"   "Valiant"            
##  [7] "Duster 360"          "Merc 240D"           "Merc 230"           
## [10] "Merc 280"            "Merc 280C"           "Merc 450SE"         
## [13] "Merc 450SL"          "Merc 450SLC"         "Cadillac Fleetwood" 
## [16] "Lincoln Continental" "Chrysler Imperial"   "Fiat 128"           
## [19] "Honda Civic"         "Toyota Corolla"      "Toyota Corona"      
## [22] "Dodge Challenger"    "AMC Javelin"         "Camaro Z28"         
## [25] "Pontiac Firebird"    "Fiat X1-9"           "Porsche 914-2"      
## [28] "Lotus Europa"        "Ford Pantera L"      "Ferrari Dino"       
## [31] "Maserati Bora"       "Volvo 142E"
nrow(mtcars)
## [1] 32
ncol(mtcars)
## [1] 11
row.names(mtcars)
##  [1] "Mazda RX4"           "Mazda RX4 Wag"       "Datsun 710"         
##  [4] "Hornet 4 Drive"      "Hornet Sportabout"   "Valiant"            
##  [7] "Duster 360"          "Merc 240D"           "Merc 230"           
## [10] "Merc 280"            "Merc 280C"           "Merc 450SE"         
## [13] "Merc 450SL"          "Merc 450SLC"         "Cadillac Fleetwood" 
## [16] "Lincoln Continental" "Chrysler Imperial"   "Fiat 128"           
## [19] "Honda Civic"         "Toyota Corolla"      "Toyota Corona"      
## [22] "Dodge Challenger"    "AMC Javelin"         "Camaro Z28"         
## [25] "Pontiac Firebird"    "Fiat X1-9"           "Porsche 914-2"      
## [28] "Lotus Europa"        "Ford Pantera L"      "Ferrari Dino"       
## [31] "Maserati Bora"       "Volvo 142E"
dim(mtcars)
## [1] 32 11
#数据框的合并,后面会学习
#rbind
#cbind
#merge

###########数据框数据的筛选##################
#行列索引提取
mtcars[1:2,]
mtcars[,3:5]
#一起用
mtcars[1:2,3:5]
#不连续
mtcars[c(2,4),c(3,6,9)]
#通过列名称提取
mtcars[,c("mpg","hp")]
#通过$符号提取
mtcars$hp
##  [1] 110 110  93 110 175 105 245  62  95 123 123 180 180 180 205 215 230  66  52
## [20]  65  97 150 150 245 175  66  91 113 264 175 335 109
mtcars[,c("mpg")]
##  [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
## [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
## [31] 15.0 21.4
mtcars[,c("mpg"),drop=FALSE]
#筛选, 产生逻辑向量进行筛选
coln<-colnames(mtcars)
interestCol<-colnames(mtcars)%in%c("hp","wt")
interestCol
##  [1] FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
mtcars[,interestCol]  
#mtcars[interestCol]

mtcars$hp>100
##  [1]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
## [13]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
## [25]  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
mtcars[mtcars$hp>100,]
mtcars$hp>100 & mtcars$cyl >6
##  [1] FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE
## [13]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
## [25]  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE
mtcars[mtcars$hp>100 & mtcars$cyl >6,]
#subset  方法

subset(mtcars,hp>100 & cyl>6)
#数据排序

#order 产生一个排序后的索引


orderIndex<-order(mtcars[,1])
orderIndex
##  [1] 15 16 24  7 17 31 14 23 22 29 12 13 11  6  5 10 25 30  1  2  4 32 21  3  9
## [26]  8 27 26 19 28 18 20
mtcars[orderIndex,]
orderIndex<-order(mtcars[,1],decreasing = TRUE)
orderIndex
##  [1] 20 18 19 28 26 27  8  3  9 21  4 32  1  2 30 10 25  5  6 11 13 12 29 22 14
## [26] 23 31 17  7 24 15 16
mtcars[orderIndex,]
mtcars[order(mtcars[,1],decreasing = TRUE),]

作业:筛选出mtcars 数据框中gear=4 或者 gear =3 的数据,最后按照mpg从大到小排序,赋值到一个新的变量中存储。

作业答案:

res<-mtcars[ mtcars$gear==3 | mtcars$gear==4, ]
res
orderIndex<-order(res[,1],decreasing = TRUE)
orderIndex
##  [1] 20 18 19 26  8  3  9 21  4 27  1  2 10 25  5  6 11 13 12 22 14 23 17  7 24
## [26] 15 16
res[orderIndex,]
res1<-res[orderIndex,]

4.7 列表list

列表的创建用list()

a<-c(1,4,2,2)
b<-matrix(1:12,nrow=2,ncol=6)
c<-mtcars

mylist<-list(a,b,c)
mylist
## [[1]]
## [1] 1 4 2 2
## 
## [[2]]
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    1    3    5    7    9   11
## [2,]    2    4    6    8   10   12
## 
## [[3]]
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
#列表元素添加或修改name
names(mylist)
## NULL
names(mylist)<-c("a","b","c")

names(mylist)
## [1] "a" "b" "c"
#列表元素获取,索引或者name
mylist[1]
## $a
## [1] 1 4 2 2
mylist["a"]
## $a
## [1] 1 4 2 2
mylist[[1]]
## [1] 1 4 2 2
mylist[["a"]]
## [1] 1 4 2 2
mylist[["c"]]
mylist["c"]
## $c
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

5 数据读入与写出:

数据的读入与输出read.table和write.table

#设置工作路径
setwd("~/single-cell/单细胞高级分析/01.start_R") #linux
#setwd("D:\\单细胞高级分析\\01.start_R")     #windows

#数据路径的设置,目录之间分隔linux可以用 / , windows可以用 \\
#header 是否把第一行读成表头
#sep 设置数据列的分隔符,常见有\t , 等
#comment.char  指定注释行符号,行的开头含有这个符号,会忽略这一行;
#check.names  检查数据的有效性,通常检查列名,默认开启,-会变成 .
#row.names  把第一列读成行名

myfpkm<-read.table("data/All_gene_fpkm.txt",header=TRUE,comment.char="",sep = "\t",check.names=FALSE,row.names=1,stringsAsFactors=FALSE)
head(myfpkm)
#一些特殊的数据读入方法
#read.csv(),read.delim()

#myfpkm<- read.csv("data/All_gene_fpkm.csv",header=TRUE,comment.char="")

#######################修改列名###############################
#rownames(myfpkm) #查看行名
#colnames(myfpkm) #查看列名

colnames(myfpkm)<-c("x1", "x2" ,"x3"  ,"z1" ,"z2" ,"z3" )
colnames(myfpkm)
## [1] "x1" "x2" "x3" "z1" "z2" "z3"
head(myfpkm)
#rowSums(myfpkm) #行求和

#colSums(myfpkm) #列求和

#rowMeans(myfpkm) #行平均值

#colMeans(myfpkm) #列平均值

#str(myfpkm) #列数据类型


########将新数据添加到数据框中################################################

myfpkm$sum<-rowSums(myfpkm)
head(myfpkm)
ncol(myfpkm)
## [1] 7
#删除列
myfpkm<-myfpkm[,-7]
head(myfpkm)
## 数据的写出
#筛选数据,筛选高表达基因,更多数据筛选方法可参考:http://www.omicsclass.com/article/83
myfpkm<-myfpkm[rowSums(myfpkm)>1,]
nrow(myfpkm)
## [1] 7967
getwd()
## [1] "/home/us001/single-cell/单细胞高级分析/01.start_R"
write.table(myfpkm,file = "filtered_fpkm.txt",quote = FALSE,sep = "\t")

6 逻辑判断操作:

#&、|、&&、|| 逻辑判断
#注意:运算符“逻辑与”和“逻辑或”存在两种形式,“&”和“|”作用在对象中的每一个元素上并且返回和比较次数相等长度的逻辑值;
#“&&”和“||”只作用在对象的第一个元素上。

T & F
## [1] FALSE
F || T
## [1] TRUE
a <- c(T,T,T)
b <- c(T,F,T)
a&b
## [1]  TRUE FALSE  TRUE
a|b
## [1] TRUE TRUE TRUE
a&&b
## Warning in a && b: 'length(x) = 3 > 1' in coercion to 'logical(1)'

## Warning in a && b: 'length(x) = 3 > 1' in coercion to 'logical(1)'
## [1] TRUE
a||b
## Warning in a || b: 'length(x) = 3 > 1' in coercion to 'logical(1)'
## [1] TRUE
mtcars$hp >100
##  [1]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
## [13]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
## [25]  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
mtcars$mpg<20
##  [1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
## [13]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
## [25]  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE
mtcars$hp >100 & mtcars$mpg<20
##  [1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
## [13]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
## [25]  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE
mtcars[mtcars$hp >100 & mtcars$mpg<20,]

7 常用的一些方法

x<-c(12,44,2,424,42,232)
mean(x)
## [1] 126
sum(x)
## [1] 756
range(x)
## [1]   2 424
max(x)
## [1] 424
min(x)
## [1] 2
var(x)   #方差
## [1] 28438.4
sd(x)    #标准差
## [1] 168.6369
#数据NA 缺失值处理方法
x<-c(12,44,2,NA,42,232)
mean(x,na.rm=TRUE)
## [1] 66.4
sum(x,na.rm=TRUE)
## [1] 332
range(x,na.rm=TRUE)
## [1]   2 232
max(x,na.rm=TRUE)
## [1] 232
min(x,na.rm=TRUE)
## [1] 2
var(x,na.rm=TRUE)   #方差
## [1] 8906.8
sd(x,na.rm=TRUE)    #标准差
## [1] 94.37584

8 本文档使用R包版本信息

sessionInfo()
## R version 4.2.2 (2022-10-31)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Rocky Linux 9.2 (Blue Onyx)
## 
## Matrix products: default
## BLAS:   /share/biosoft/R/R-v4.2.2/lib64/R/lib/libRblas.so
## LAPACK: /share/biosoft/R/R-v4.2.2/lib64/R/lib/libRlapack.so
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] ggplot2_3.5.0.9000
## 
## loaded via a namespace (and not attached):
##  [1] rstudioapi_0.15.0 magrittr_2.0.3    knitr_1.45        tidyselect_1.2.0 
##  [5] munsell_0.5.0     colorspace_2.1-0  R6_2.5.1          rlang_1.1.2      
##  [9] fastmap_1.1.1     fansi_1.0.6       dplyr_1.1.4       tools_4.2.2      
## [13] grid_4.2.2        gtable_0.3.4      xfun_0.41         utf8_1.2.4       
## [17] cli_3.6.2         withr_2.5.2       jquerylib_0.1.4   htmltools_0.5.7  
## [21] yaml_2.3.8        digest_0.6.33     tibble_3.2.1      lifecycle_1.0.4  
## [25] sass_0.4.8        vctrs_0.6.5       glue_1.6.2        cachem_1.0.8     
## [29] evaluate_0.23     rmarkdown_2.25    pillar_1.9.0      compiler_4.2.2   
## [33] bslib_0.6.1       generics_0.1.3    scales_1.3.0      jsonlite_1.8.8   
## [37] pkgconfig_2.0.3