寫在開頭:R提供了各種具有分析數(shù)據(jù)與強大作圖功能的工具包。對于沒有計算背景出身的生物學(xué)家來說荤懂,相比于各種復(fù)雜的編程語言,如java塘砸、C語言等节仿,R語言是非常友好的,R語言的語法相對簡單掉蔬,容易上手廊宪,尤其是對于統(tǒng)計分析和數(shù)據(jù)處理任務(wù)。初學(xué)者可以快速編寫和運行數(shù)據(jù)分析代碼女轿,而無需掌握復(fù)雜的編程概念箭启。
R語言內(nèi)置了大量的統(tǒng)計函數(shù)和數(shù)據(jù)處理函數(shù),用戶可以直接調(diào)用這些函數(shù)來完成各種分析任務(wù)蛉迹,而無需編寫大量的代碼册烈。其次R語言有一個龐大且活躍的用戶社區(qū),貢獻了大量的擴展包婿禽,提供了豐富的文檔赏僧、教程和示例代碼。R語言通常在交互式環(huán)境(如RStudio)中使用扭倾,允許用戶逐步運行代碼淀零、查看結(jié)果并進行調(diào)整。這種交互式編程方式非常適合數(shù)據(jù)分析和探索性研究膛壹。
首先R的下載和安裝
可以選用清華鏡像來下載R(The Comprehensive R Archive Network (tsinghua.edu.cn))驾中,根據(jù)自己的操作系統(tǒng)選擇對應(yīng)的鏈接,下載安裝包安裝即可模聋。
RStudio是為R語言設(shè)計的集成開發(fā)環(huán)境(IDE)肩民,提供了一個圖形化用戶界面,使得用戶編寫链方、調(diào)試和運行R代碼更加方便持痰。
然后安裝Rstudio
打開RStudio安裝包官網(wǎng)下載網(wǎng)址:https://www.rstudio.com/products/rstudio/download/
下載RStudio Desktop Free版本,然后安裝即可
我還是主要根據(jù)數(shù)據(jù)分析實戰(zhàn)過程中應(yīng)用到的R語言基礎(chǔ)進行講解祟蚀。
首先R的使用很大程度是借助各種各樣的R包工窍,R包相當(dāng)于R的插件割卖,不同的插件滿足不同的需求。我們首先需要安裝包才可以使用患雏。
方法一:install.packages()鹏溯,使用其安裝R包,它會自動連接CRAN鏡像(Comprehensive R Archive Network存儲了數(shù)千個軟件包淹仑,還提供了大量的文檔和教程丙挽,幫助用戶理解和使用R包),并根據(jù)R版本選擇合適的R包下載安裝匀借,同時會解決包之間的依賴關(guān)系颜阐,例如install.packages("ggplot2")
方法二:Bioconductor 是一個專門用于生物信息學(xué)研究的開源軟件項目,提供了一套強大的工具包怀吻,用于處理和分析高通量數(shù)據(jù)瞬浓。Bioconductor 項目下的 R 包主要通過 BiocManager 進行安裝和管理
#首先安裝BiocManager
install.packages("BiocManager")
#然后使用它安裝Bioconductor中的包
BiocManager::install("DESeq2")
方法三:從 GitHub 上安裝 R 包初婆。開發(fā)者通常在 GitHub 上托管最新的R包版本蓬坡,這些版本可能包含最新的功能和修復(fù),但尚未發(fā)布到 CRAN磅叛。從 GitHub 上安裝 R 包可以使用 devtools 或 remotes 包屑咳。devtools:功能更全面,適用于R包的整個開發(fā)過程弊琴,包含創(chuàng)建兆龙、測試、文檔生成和發(fā)布R包的功能敲董,對開發(fā)者特別有用紫皇。remotes:專注于從遠(yuǎn)程存儲庫安裝R包。更輕量級腋寨,適合只需要安裝包而不需要完整開發(fā)工具的用戶聪铺。適用于安裝包的特定版本或從非CRAN來源安裝包。
#首先安裝devtools包
install.packages("devtools")
#假設(shè)要安裝的 R 包位于 GitHub 上的用戶名 username 和倉庫名 reponame
devtools::install_github("username/reponame")
devtools::install_github("YuLab-SMU/enrichplot")
#查看包的安裝路徑
./libPath()
#設(shè)置臨時的包安裝路徑萄窜,每次加載包或安裝包前都需重新設(shè)置
.libPaths(c("/home/seurat_v5/", .libPaths()))
#手動設(shè)置包的安裝路徑铃剔,這樣可以在不同的路徑下安裝不同版本的R包,從而避免包版本沖突
install.packages('Matrix',lib = "/home/seurat_v5/")
分析之前先設(shè)置工作目錄
#顯示工作目錄
getwd()
#設(shè)置工作目錄
setwd('/home/RNA-seq')
#加載包
library(DESeq2)
library(pheatmap)
library(ggplot2)
以bulk轉(zhuǎn)錄組數(shù)據(jù)為例查刻,讀取上游分析生成的基因表達(dá)矩陣键兜,
#默認(rèn)讀取以","分割的文件,header默認(rèn)值為TRUE穗泵,表示第一行是列名普气。
countdata <- read.csv("/home/RNA-seq/repeat_analysis/stringtie/gene_count_matrix.csv",row.name="gene_id",header = TRUE)
#read.table函數(shù)是R語言中用于讀取文本文件的通用函數(shù),適用于各種分隔符的文件佃延。它功能強大棋电,參數(shù)靈活茎截,可以處理復(fù)雜的數(shù)據(jù)文件格式。
#sep指定分隔符赶盔,默認(rèn)是空格企锌;row.names指定行名,na.strings指定哪些字符串表示缺失值,默認(rèn)值為"NA"于未,header同上
countdata <- read.table("/home/RNA-seq/repeat_analysis/stringtie/gene_count_matrix.csv",sep = ",",row.names="gene_id")
使用write函數(shù)將結(jié)果寫入文件
#寫入的數(shù)據(jù)結(jié)構(gòu)主要為矩陣和數(shù)據(jù)框撕攒。sep默認(rèn)為空格;row.names是否寫入行名烘浦,默認(rèn)值為TRUE抖坪。quote = FALSE,字符型或因子型數(shù)據(jù)不會被加上引號
write.table(res1_Enew,file = "res1_Enew.xlsx",quote = F,row.names = T)
我接下來介紹一下R語言的數(shù)據(jù)結(jié)構(gòu)
常用數(shù)據(jù)類型分為:數(shù)值型闷叉,可用于計算加減乘除擦俐;字符串型,可進行連接握侧、轉(zhuǎn)換和提取等蚯瞧,字符串型數(shù)據(jù)需要用引號來說明,如 "hello, world"品擎;邏輯型埋合,F(xiàn)或T;日期型等萄传。
R對象:是賦值給變量的任何事物甚颂,包括常量、函數(shù)秀菱、圖形等
R對象的數(shù)據(jù)結(jié)構(gòu)(重要):向量振诬、矩陣、數(shù)組衍菱、列表赶么、數(shù)據(jù)框、因子
向量:用于存儲數(shù)值型梦碗、字符型禽绪、邏輯型數(shù)據(jù)的一維數(shù)組。使用c()函數(shù)創(chuàng)建向量洪规,用<-和=來賦值
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] #負(fù)整數(shù)索引,返回除了1以外的所有元素
x[c(T,T,F,F,F,F)] #邏輯向量索引斩例,返回1,2
#刪除向量中的元素
x <- x[-c(1,3)]
#修改向量中的元素
x[6] <-12
#在指定位置添加數(shù)據(jù)(x參數(shù)指定向量雄人,values是添加的數(shù)據(jù),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
#向量運算函數(shù)础钠,mean求均值恰力,sd求標(biāo)準(zhǔn)差、var求方差旗吁、quantile求四分位數(shù)踩萎、seq函數(shù)構(gòu)建任意差值等差數(shù)列、...
abs(x) #返回向量的絕對值
sum(x) #求和
range(x) #返回最大值和最小值
max(x) #求最大值很钓,min(x)求最小值
median(x) #求中值
round(a,2) #保留兩位小數(shù)
log(16,base=2) #求對數(shù)
矩陣:矩陣是二維的向量香府,有行列,可以是數(shù)值型码倦、字符型企孩、邏輯型,但一個矩陣中只能有一種數(shù)據(jù)類型袁稽。使用matrix函數(shù)創(chuàng)建
x<-c(1:20) #x為1到20
#構(gòu)建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函數(shù)定義矩陣的行名和列名
dimnames(m) <- list(rname,cname)
#dim函數(shù)顯示維數(shù)
dim(m) #返回4 5
#為向量x添加維數(shù),創(chuàng)建一個4行5列的二維數(shù)組(矩陣)
dim(x) <-c(4,5)
#通過索引訪問矩陣元素推汽。也可以用元素的名稱來訪問
m[1,2] #訪問第一行补疑,第二列,返回2
m[1,] #訪問第一行
#矩陣計算
m+m #對應(yīng)位置的元素相加
n <- matrix(1:20,5,4)
m+n #n是5行4列民泵,m是4行5列癣丧,行列數(shù)目不同槽畔,無法計算
t(m) #矩陣行列轉(zhuǎn)置
數(shù)組:多維的矩陣栈妆,array()函數(shù)創(chuàng)建數(shù)組
#用1到24創(chuàng)建2行3列4組的三維數(shù)組
z <- array(1:24,c(2,3,4))
列表:一些對象的有序結(jié)合,可以存儲多個向量厢钧、矩陣鳞尔、數(shù)據(jù)框、列表的組合早直,它可以包含多種任何類型的數(shù)據(jù)寥假。使用list函數(shù)創(chuàng)建列表
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 #同上
#雙括號輸出數(shù)據(jù)本身
list[[]]
數(shù)據(jù)框:數(shù)據(jù)框由行和列組成霞扬,其中每列可以包含不同類型的數(shù)據(jù)(如數(shù)值糕韧、字符、因子等)喻圃,但同一列中的數(shù)據(jù)類型必須相同萤彩。用dataframe函數(shù)創(chuàng)建數(shù)據(jù)框
df <- data.frame(
name = c("Alice", "Bob", "Charlie"),
age = c(25, 30, 35),
gender = c("F", "M", "M")
)
#同樣可以通過索引、元素名稱來訪問
因子:Factor是一種用于表示分類數(shù)據(jù)的數(shù)據(jù)類型斧拍。因子是一種特殊的向量雀扶,通常用于存儲類別(分類)數(shù)據(jù)和有序數(shù)據(jù)客峭,例如性別、等級痰滋、地區(qū)等些楣。因子的一個重要特性是,它們不僅存儲了數(shù)據(jù)本身浪册,還存儲了數(shù)據(jù)的分類水平(levels)扫腺。使用factor函數(shù)創(chuàng)建
#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)是一種用于表示文本的數(shù)據(jù)類型。字符串是由一系列字符組成的村象,可以包括字母斧账、數(shù)字、標(biāo)點符號和其他特殊字符煞肾。支持正則表達(dá)式處理字符串咧织。R使用單引號(')或雙引號(") 來創(chuàng)建字符串
str1 <- "Hello, world!"
#字符串的基本操作
#連接字符串
str2 <- paste("Hello", "world", sep = ", ")
# 獲取字符串長度
len <- nchar(str1)
# 提取子字符串
substr_str <- substr(str1, 1, 5) #返回Hello
# 拆分字符串
split_str <- strsplit(str1, ", ")
#替換字符串
#sub 函數(shù)只替換第一次出現(xiàn)的匹配,而 gsub 函數(shù)會替換所有匹配的部分
#pattern:要匹配的正則表達(dá)式模式籍救。replacement:用于替換的字符串习绢。x:輸入的字符串向量。ignore.case:是否忽略大小寫蝙昙,默認(rèn)為 FALSE闪萄。fixed:默認(rèn)為 FALSE,支持正則表達(dá)式奇颠。gsub函數(shù)用法一樣
sub(pattern, replacement, x, ignore.case = FALSE, fixed = FALSE)
dates <- c("12/31/2023", "31-12-2023", "2023.12.31")
#sub 函數(shù)替換第一個匹配的日期格式败去,將其轉(zhuǎn)換為 YYYY-MM-DD。gsub 函數(shù)替換所有匹配的日期格式烈拒,將它們統(tǒng)一轉(zhuǎn)換為 YYYY-MM-DD
#(\\d{2}):\\d:匹配任何數(shù)字字符(0-9)圆裕。{2}表示前面的匹配應(yīng)當(dāng)出現(xiàn)兩次,即匹配兩位數(shù)字荆几。()圓括號用于捕獲匹配的內(nèi)容吓妆,形成第一個捕獲組group 1;[/-]:[]表示字符類吨铸,匹配方括號中的任意一個字符行拢。/ 和 -:在字符類中表示匹配斜杠 / 或橫杠 -。(\\d{2}):再次匹配兩位數(shù)字诞吱,形成第二個捕獲組group2舟奠。替換模式 \\3-\\1-\\2:將匹配的內(nèi)容重新排列成 YYYY-MM-DD 的格式,使用了反向引用房维,通過 \\ 加上捕獲組的編號來引用捕獲的內(nèi)容沼瘫。
pattern <- "(\\d{2})[/-](\\d{2})[/-](\\d{4})"
replacement <- "\\3-\\1-\\2"# 定義正則表達(dá)式和替換模式
result_sub <- sub(pattern, replacement, dates)
#grep函數(shù)用于查找字符串
#value:是否返回匹配的字符串而不是索引,默認(rèn)為 FALSE握巢。invert:是否返回不匹配的索引或值晕鹊,默認(rèn)為 FALSE
grep(pattern, x, ignore.case = FALSE, value = FALSE, fixed = FALSE, invert = FALSE)
#輸出R對象的結(jié)構(gòu)
str(c(123))
#返回 num [1:3] 1 2 3
#class()函數(shù)用于獲取對象的類型。
class(123) #返回numeric
Rstudio使用技巧
Rstudio換源:Tools----> Global Options ------> Package Managment,換源即可
Ctrl + Enter:執(zhí)行光標(biāo)所在代碼行
Ctrl + Shift +C:代碼注釋或解除注釋
Ctrl + L:控制臺清屏
長代碼分塊:#####前后5個#號#####
如何為對象起名:R處理的所有數(shù)據(jù)溅话、變量晓锻、結(jié)果都以R對象的形式保存。注意需要區(qū)分大小寫飞几;不能用數(shù)字作為變量砚哆,對象也不能用數(shù)字開頭,但是數(shù)字可以放在中間或結(jié)尾屑墨;建議不要用過短的名稱躁锁,可以用"_"等作為間隔;不要使用保留字(是R語言中已經(jīng)被賦予特定意義的一些單詞卵史,如NA缺失值)