| 问答社区:http://www.omicsclass.com/ | 组学大讲堂公众号 | 生信课堂 |
| 课程推荐1:R语言入门与基础绘图 | 课程推荐2:R语言绘图(ggplot) | 所有生信课程:点击 |
R语言是于1991年由新西兰奥克兰大学的Robert Gentleman 和 Ross Ihaka 及其他志愿人员开发的一个语言系统。因为这两个开发者的名字都是以字母R开头,所以就叫做R语言,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语言绘制的.
1)学习R
2)R语言编程艺术
3)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.5.3(2026.04.13),如果要下载最新版本,可以到上面网址查找最新版本下载。 最新版本 下载地址:https://mirrors.tuna.tsinghua.edu.cn/CRAN/
1)下载地址:
Rstudio 为R语言的专业编辑器,有代码的提示,高亮显示等等功能,强烈推荐使用,初学者根据自己的操作系统下载RStudio Desktop 免费版本就可以:
官方下载网址:https://www.rstudio.com/products/rstudio/download/
2)常见问题解答:
Rstudio中文乱码:http://www.omicsclass.com/article/294
Positron 是 Posit 公司(原 RStudio 公司)推出的“下一代”数据科学 IDE,其核心优势在于原生支持多语言和现代化架构,与经典的 RStudio 形成明确分工:RStudio 专注于 R 语言的深度集成,稳定成熟,适合依赖 R 包开发、R Markdown 等传统工作流的用户;而 Positron 基于 VS Code 同源的 Code OSS 架构,将 R 和 Python 均作为一等公民,支持一键切换内核、进程隔离、兼容 VS Code 扩展生态,并内置交互式数据浏览器和原生 AI 助手等现代化工具。Positron 并非要取代 RStudio,两者将长期并存——RStudio 负责维护稳定性和安全性,Positron 则承载所有新功能的开发。如果你需要同时使用 R 和 Python、追求扩展性、或希望获得 AI 辅助和更强的数据查看体验,Positron 是更优的选择;若工作流深度绑定 R 专属功能,继续使用 RStudio 更为稳妥。
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", "getopt"), repos = "http://mirrors.tuna.tsinghua.edu.cn/CRAN/",dependencies = TRUE)
网站: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")
github上的包可以用devtools或者remotes包安装
install.packages("devtools")
devtools::install_github('cole-trapnell-lab/monocle3')
install.packages("remotes") # 首先安装 remote 包
remotes::install_github("GuangchuangYu/nCov2019") # 尝试安装
library(ggplot2)
#或者
require(ggplot2)
#加载包时,如果报错说明包没有安装成功
#获取帮助信息
?plot
example(plot)
?install.packages
??geto
#如果你还记得你的电脑中存在某个方法可以实现某些统计分析功能,但又想不起该方法属于哪个包时:
help.search("geto")
#设置国内的镜像地址,加快安装进度
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")
根据数据分析需求,选用不同的数据对象类型,包括:
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
变量的命名注意事项 - 变量名称可包含英文字母(大小写字母)、数字、下划线和英文点号 - 不能有中文、空格、- 存在 - 不能以 数字、下划线、 #,开头必须是英文字母或者点 - 不能与R中的保留关键字同名:table,rowSums,pi
R语言里面习惯用 . : avg.clicks
其他语言:avg_Clicks , avgClicks
变量赋值 = or <- or ->
向量就像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
可以添加,减去,相乘或相除两个相同长度的向量,将结果作为向量输出。
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
因子(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"
方法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
数据框,重点
数据框与矩阵类似,也是二维的。与矩阵不同的是,数据框中各列的数据类型可以不同,但长度必须相同。
创建方法: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
获取数据框一些属性的方法
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
R数据框的合并基础方法:
推荐使用dplyr包合并数据,参考:https://dplyr.tidyverse.org/articles/two-table.html
#行列索引提取
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,]
列表的创建用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
## [ reached 'max' / getOption("max.print") -- omitted 23 rows ]
列表元素添加或修改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
## [ reached 'max' / getOption("max.print") -- omitted 23 rows ]
数据的读入与输出read.table和write.table
数据路径的设置,目录之间分隔linux可以用 / , windows可以用 \
read.table 重要参数:
#设置工作路径
setwd("~/single-cell/单细胞个性化分析/00.start_R") #linux
#setwd("D:\\单细胞个性化分析\\00.start_R") #windows
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/单细胞个性化分析/00.start_R"
write.table(myfpkm,file = "filtered_fpkm.txt",quote = FALSE,sep = "\t")
#&、|
#注意:运算符“逻辑与”和“逻辑或”存在两种形式,“&”和“|”作用在对象中的每一个元素上并且返回和比较次数相等长度的逻辑值;
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
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,]
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
使用方法: paste(…, sep = ” “, collapse = NULL)
a <- "Hello"
b <- 'How'
c <- "are you? "
d <- paste(a, b, c, sep = " ")
d
## [1] "Hello How are you? "
sessionInfo()
## R version 4.4.2 (2024-10-31)
## Platform: x86_64-pc-linux-gnu
## Running under: Rocky Linux 9.4 (Blue Onyx)
##
## Matrix products: default
## BLAS: /share/biosoft/R/R-v4.4.2/lib64/R/lib/libRblas.so
## LAPACK: /share/biosoft/R/R-v4.4.2/lib64/R/lib/libRlapack.so; LAPACK version 3.12.0
##
## 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
##
## time zone: Asia/Shanghai
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] ggplot2_4.0.2
##
## loaded via a namespace (and not attached):
## [1] vctrs_0.7.2 cli_3.6.6 knitr_1.51 rlang_1.2.0
## [5] xfun_0.57 otel_0.2.0 generics_0.1.4 S7_0.2.1
## [9] jsonlite_2.0.0 glue_1.8.0 htmltools_0.5.9 sass_0.4.10
## [13] scales_1.4.0 rmarkdown_2.31 grid_4.4.2 tibble_3.3.1
## [17] evaluate_1.0.5 jquerylib_0.1.4 fastmap_1.2.0 yaml_2.3.12
## [21] lifecycle_1.0.5 compiler_4.4.2 dplyr_1.2.1 RColorBrewer_1.1-3
## [25] pkgconfig_2.0.3 rstudioapi_0.18.0 farver_2.1.2 digest_0.6.39
## [29] R6_2.6.1 tidyselect_1.2.1 dichromat_2.0-0.1 pillar_1.11.1
## [33] magrittr_2.0.5 bslib_0.10.0 withr_3.0.2 tools_4.4.2
## [37] gtable_0.3.6 cachem_1.1.0