一. R语言实战入门

写在开头:R提供了各种具有分析数据与强大作图功能的工具包。对于没有计算背景出身的生物学家来说,相比于各种复杂的编程语言,如java、C语言等,R语言是非常友好的,R语言的语法相对简单,容易上手,尤其是对于统计分析和数据处理任务。初学者可以快速编写和运行数据分析代码,而无需掌握复杂的编程概念。
R语言内置了大量的统计函数和数据处理函数,用户可以直接调用这些函数来完成各种分析任务,而无需编写大量的代码。其次R语言有一个庞大且活跃的用户社区,贡献了大量的扩展包,提供了丰富的文档、教程和示例代码。R语言通常在交互式环境(如RStudio)中使用,允许用户逐步运行代码、查看结果并进行调整。这种交互式编程方式非常适合数据分析和探索性研究。
首先R的下载和安装
可以选用清华镜像来下载R(The Comprehensive R Archive Network (tsinghua.edu.cn)),根据自己的操作系统选择对应的链接,下载安装包安装即可。

R下载

RStudio是为R语言设计的集成开发环境(IDE),提供了一个图形化用户界面,使得用户编写、调试和运行R代码更加方便。
然后安装Rstudio
打开RStudio安装包官网下载网址:https://www.rstudio.com/products/rstudio/download/
下载RStudio Desktop Free版本,然后安装即可

我还是主要根据数据分析实战过程中应用到的R语言基础进行讲解。

首先R的使用很大程度是借助各种各样的R包,R包相当于R的插件,不同的插件满足不同的需求。我们首先需要安装包才可以使用。
方法一:install.packages(),使用其安装R包,它会自动连接CRAN镜像(Comprehensive R Archive Network存储了数千个软件包,还提供了大量的文档和教程,帮助用户理解和使用R包),并根据R版本选择合适的R包下载安装,同时会解决包之间的依赖关系,例如install.packages("ggplot2")
方法二:Bioconductor 是一个专门用于生物信息学研究的开源软件项目,提供了一套强大的工具包,用于处理和分析高通量数据。Bioconductor 项目下的 R 包主要通过 BiocManager 进行安装和管理

#首先安装BiocManager
install.packages("BiocManager")
#然后使用它安装Bioconductor中的包
BiocManager::install("DESeq2")

方法三:从 GitHub 上安装 R 包。开发者通常在 GitHub 上托管最新的R包版本,这些版本可能包含最新的功能和修复,但尚未发布到 CRAN。从 GitHub 上安装 R 包可以使用 devtools 或 remotes 包。devtools:功能更全面,适用于R包的整个开发过程,包含创建、测试、文档生成和发布R包的功能,对开发者特别有用。remotes:专注于从远程存储库安装R包。更轻量级,适合只需要安装包而不需要完整开发工具的用户。适用于安装包的特定版本或从非CRAN来源安装包。

#首先安装devtools包
 install.packages("devtools")
#假设要安装的 R 包位于 GitHub 上的用户名 username 和仓库名 reponame
devtools::install_github("username/reponame")
devtools::install_github("YuLab-SMU/enrichplot")
#查看包的安装路径
./libPath()
#设置临时的包安装路径,每次加载包或安装包前都需重新设置
.libPaths(c("/home/seurat_v5/", .libPaths()))
#手动设置包的安装路径,这样可以在不同的路径下安装不同版本的R包,从而避免包版本冲突
install.packages('Matrix',lib = "/home/seurat_v5/")

分析之前先设置工作目录

#显示工作目录
getwd()
#设置工作目录
setwd('/home/RNA-seq')
#加载包
library(DESeq2)
library(pheatmap)
library(ggplot2)

以bulk转录组数据为例,读取上游分析生成的基因表达矩阵,

#默认读取以","分割的文件,header默认值为TRUE,表示第一行是列名。
countdata <- read.csv("/home/RNA-seq/repeat_analysis/stringtie/gene_count_matrix.csv",row.name="gene_id",header = TRUE) 
#read.table函数是R语言中用于读取文本文件的通用函数,适用于各种分隔符的文件。它功能强大,参数灵活,可以处理复杂的数据文件格式。
#sep指定分隔符,默认是空格;row.names指定行名,na.strings指定哪些字符串表示缺失值,默认值为"NA",header同上
countdata <- read.table("/home/RNA-seq/repeat_analysis/stringtie/gene_count_matrix.csv",sep = ",",row.names="gene_id")

使用write函数将结果写入文件

#写入的数据结构主要为矩阵和数据框。sep默认为空格;row.names是否写入行名,默认值为TRUE。quote = FALSE,字符型或因子型数据不会被加上引号
write.table(res1_Enew,file = "res1_Enew.xlsx",quote = F,row.names = T)

我接下来介绍一下R语言的数据结构
常用数据类型分为:数值型,可用于计算加减乘除;字符串型,可进行连接、转换和提取等,字符串型数据需要用引号来说明,如 "hello, world";逻辑型,F或T;日期型等。
R对象:是赋值给变量的任何事物,包括常量、函数、图形等
R对象的数据结构(重要):向量、矩阵、数组、列表、数据框、因子
向量:用于存储数值型、字符型、逻辑型数据的一维数组。使用c()函数创建向量,用<-和=来赋值

x <- c(1,2,3,4,5,6)
group <- c("C","E")
y <- c(FALSE, TRUE, FALSE)
#使用索引访问向量
x[c(1,3)] #输出1,3
x[-1] #负整数索引,返回除了1以外的所有元素
x[c(T,T,F,F,F,F)] #逻辑向量索引,返回1,2
#删除向量中的元素
x <- x[-c(1,3)]
#修改向量中的元素
x[6] <-12
#在指定位置添加数据(x参数指定向量,values是添加的数据,after是添加位置的索引)
x <- append(x=a,values=20,after=4) #输出1,2,3,4,20,5,6
#向量进行逻辑运算
x>5 #返回F,F,F,T
x <- c(1,2,3,4,5,6)
z<-c(4,5,6,1,2,3)
x>z #每个元素一一对比
x %in% z #左边的所有元素是否在右边的对象中,返回T,T,T,F,T,T
#向量运算函数,mean求均值,sd求标准差、var求方差、quantile求四分位数、seq函数构建任意差值等差数列、...
abs(x) #返回向量的绝对值
sum(x) #求和
range(x) #返回最大值和最小值
max(x) #求最大值,min(x)求最小值
median(x) #求中值
round(a,2) #保留两位小数
log(16,base=2) #求对数

矩阵:矩阵是二维的向量,有行列,可以是数值型、字符型、逻辑型,但一个矩阵中只能有一种数据类型。使用matrix函数创建

x<-c(1:20) #x为1到20
#构建4行5列的矩阵,按行排列
m <- matrix(x,nrow=4,ncol=5, byrow=TRUE) 
rname <- c("r1","r2","r3","r4")
cname <-c("c1","c2","c3","c4","c5")
#dimnames函数定义矩阵的行名和列名
dimnames(m) <- list(rname,cname)
#dim函数显示维数
dim(m) #返回4 5
#为向量x添加维数,创建一个4行5列的二维数组(矩阵)
dim(x) <-c(4,5)
#通过索引访问矩阵元素。也可以用元素的名称来访问
m[1,2] #访问第一行,第二列,返回2
m[1,] #访问第一行
#矩阵计算
m+m #对应位置的元素相加
n <- matrix(1:20,5,4)
m+n #n是5行4列,m是4行5列,行列数目不同,无法计算
t(m) #矩阵行列转置

数组:多维的矩阵,array()函数创建数组

#用1到24创建2行3列4组的三维数组
z <- array(1:24,c(2,3,4))

列表:一些对象的有序结合,可以存储多个向量、矩阵、数据框、列表的组合,它可以包含多种任何类型的数据。使用list函数创建列表

x<-c(1:20)
m <- matrix(m,4,5)
b <- "character"
list <- list(1=x,2=m,3=b)
#索引访问
list[1] #访问向量x,输出的是一个子集列表
#使用元素访问
list[c("1")] #访问向量x
list$1 #同上
#双括号输出数据本身
list[[]]

数据框:数据框由行和列组成,其中每列可以包含不同类型的数据(如数值、字符、因子等),但同一列中的数据类型必须相同。用dataframe函数创建数据框

df <- data.frame(
  name = c("Alice", "Bob", "Charlie"),
  age = c(25, 30, 35),
  gender = c("F", "M", "M")
)
#同样可以通过索引、元素名称来访问

因子:Factor是一种用于表示分类数据的数据类型。因子是一种特殊的向量,通常用于存储类别(分类)数据和有序数据,例如性别、等级、地区等。因子的一个重要特性是,它们不仅存储了数据本身,还存储了数据的分类水平(levels)。使用factor函数创建

#level指定因子水平
group <- factor("C","C","C","E","E","E",level=c("C",'E"))
#order指定有序向量的顺序
satisfaction <- factor(c("Low", "Medium", "High", "Medium", "Low"),
                       levels = c("Low", "Medium", "High"),
                       ordered = TRUE)

字符串:字符串(String)是一种用于表示文本的数据类型。字符串是由一系列字符组成的,可以包括字母、数字、标点符号和其他特殊字符。支持正则表达式处理字符串。R使用单引号(')或双引号(") 来创建字符串

str1 <- "Hello, world!"
#字符串的基本操作
#连接字符串
str2 <- paste("Hello", "world", sep = ", ")
# 获取字符串长度
len <- nchar(str1)
# 提取子字符串
substr_str <- substr(str1, 1, 5) #返回Hello
# 拆分字符串
split_str <- strsplit(str1, ", ")

#替换字符串
#sub 函数只替换第一次出现的匹配,而 gsub 函数会替换所有匹配的部分
#pattern:要匹配的正则表达式模式。replacement:用于替换的字符串。x:输入的字符串向量。ignore.case:是否忽略大小写,默认为 FALSE。fixed:默认为 FALSE,支持正则表达式。gsub函数用法一样
sub(pattern, replacement, x, ignore.case = FALSE, fixed = FALSE)
dates <- c("12/31/2023", "31-12-2023", "2023.12.31")
#sub 函数替换第一个匹配的日期格式,将其转换为 YYYY-MM-DD。gsub 函数替换所有匹配的日期格式,将它们统一转换为 YYYY-MM-DD
#(\\d{2}):\\d:匹配任何数字字符(0-9)。{2}表示前面的匹配应当出现两次,即匹配两位数字。()圆括号用于捕获匹配的内容,形成第一个捕获组group 1;[/-]:[]表示字符类,匹配方括号中的任意一个字符。/ 和 -:在字符类中表示匹配斜杠 / 或横杠 -。(\\d{2}):再次匹配两位数字,形成第二个捕获组group2。替换模式 \\3-\\1-\\2:将匹配的内容重新排列成 YYYY-MM-DD 的格式,使用了反向引用,通过 \\ 加上捕获组的编号来引用捕获的内容。
pattern <- "(\\d{2})[/-](\\d{2})[/-](\\d{4})"
replacement <- "\\3-\\1-\\2"# 定义正则表达式和替换模式
result_sub <- sub(pattern, replacement, dates)

#grep函数用于查找字符串
#value:是否返回匹配的字符串而不是索引,默认为 FALSE。invert:是否返回不匹配的索引或值,默认为 FALSE
grep(pattern, x, ignore.case = FALSE, value = FALSE, fixed = FALSE, invert = FALSE)
#输出R对象的结构
str(c(123))
#返回 num [1:3] 1 2 3
#class()函数用于获取对象的类型。
class(123) #返回numeric
R对象结构

Rstudio使用技巧
Rstudio换源:Tools----> Global Options ------> Package Managment,换源即可
Ctrl + Enter:执行光标所在代码行
Ctrl + Shift +C:代码注释或解除注释
Ctrl + L:控制台清屏
长代码分块:#####前后5个#号#####
如何为对象起名:R处理的所有数据、变量、结果都以R对象的形式保存。注意需要区分大小写;不能用数字作为变量,对象也不能用数字开头,但是数字可以放在中间或结尾;建议不要用过短的名称,可以用"_"等作为间隔;不要使用保留字(是R语言中已经被赋予特定意义的一些单词,如NA缺失值)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容