標籤:

Live學習筆記——R語言入門與基礎繪圖系統

知乎live——R語言入門與基礎繪圖系統的學習筆記

R語言

R語言是一種自由軟體編程的語言與操作環境,主要用於統計分析、繪圖、數據挖掘。

R語言從S語言演變而來,且其源代碼完全公開。

一般來說,其他的高級編程語言能夠做的事情,R語言基本上也都能做,但是,我們一般不把R當做一門嚴謹的編程語言。

R在統計學相關的內容與繪圖方面有著巨大的優勢。如:

如何入門R

  • 下載對應系統的R語言安裝包並安裝
  • 下載RStudio
  • 打開RStudio配置一個你喜歡的顏色
  • 開始使用R
  • 當你開始使用R的時候,你已經在入門了!

R的參考書

對於沒有經驗的小夥伴推薦《R For Beginners 2.0》

對於有一點R經驗並且想學統計的小夥伴推薦《統計建模與R軟體》

對於想要一本通的小夥伴推薦《R語言實戰》

R的下載

連接至R語言的官方網站,選擇CRAN的鏡像源下載對應系統的R語言最新版本,然後安裝即可。

RStudio的下載需要到RStudio的官方網站下載,個人電腦可以下載個人版本,如果是伺服器可以下載伺服器版本,並按照官方文檔安裝即可。

RStudio是一款免費,開源的R語言IDE程序。

如果沒有Rstudio時,就只能使用命令行來進行R語言的交互。

R包

R包也稱為R程序包,是多個函數的集合,具有詳細的說明與示例,它們可以完成特定的分析功能。

在生物信息學中,最容易接觸3類包。

  • CRAN中的R包
  • bioconductor上的R包
  • 私人發布的R包

CRAN中發布的R包在R語言環境中使用命令install.packages("package name")就可以進行下載安裝。

如果使用手動安裝,就需要自己解決各個包之間的依賴關係,但是各個R包之間的依賴關係及其複雜因此不推薦使用手動的方式來進行R包的安裝。

bioconductor上發布的R包可以通過biocLite("packages name")進行下載安裝。bioconductor是一個專門用來做生物信息學的平台,上面除了R包外還有很多自己的課程。

至於私人發布的R包,emmmm,我選擇狗帶=-=

R的繪圖系統

R的繪圖系統包括R的基礎繪圖系統和R的高級繪圖系統。R的基礎繪圖系統包含低級繪圖函數和高級繪圖函數,R的高級繪圖系統包含grid繪圖系統和lattice繪圖系統。

R的繪圖系統之間的聯繫圖

很多較好的雜誌對格式的要求很多,因此使用基礎繪圖包會更加靈活方便。

R的基礎繪圖系統需要解決以下幾個基本問題

  • 繪圖區域的大小
  • 添加點
  • 添加線
  • 添加矩形,多邊形

R語言基礎

通過使用-> <- =我們可以完成對變數的賦值

a <- 12 -> aa = 1e5

使用c()生成向量

b <- c(1:10)a <- 1 c <- a + b

使用seq() rep()創建序列

d <- seq(from=1,to=100,by=5) # 賦值變數d為1到100每隔取一個數的序列d <- seq(from=1,to=101,length.out=20) # 賦值變數d為1到11,數值個數為20個的序列e <- rep(c(1:10),5) # 賦值變數e為1到10且整體重複5次的序列f <- rep(c(1:10),each=5) # 賦值變數f為1到10且每個數重複5次的序列

使用c()函數還可以合併向量

a = c(1:10) # 賦值變數a為向量1到10b = rep(c(1:10),each=5) # 賦值變數b為1到10且每個數重複5次的序列c = rep(c(1:5),2) # 賦值變數c為1到5且整體重複兩次的序列d = c(a,b,c) # 合併變數a,b,c

使用length()可以查看序列元素的個數

R語言中也有類似切片的功能

d[70] # 變數d的第70個元素d[c(1:5)] # 變數d的第1到5個元素d[-1] # 去除變數d的第一個元素

使用matrix()創建矩陣

g <- matrix(c(1:100), nrow = 10) # 賦值變數g為10行的1到100排列的矩陣h <- matrix(c(1:15),5,5) # 賦值變數h為一個5x5的矩陣且數值為1到15(元素會重複且不會報錯)

注意:使用以上方法創建矩陣時R會先把一列填滿之後再填下一列

使用upper.tri()函數可以選擇矩陣的上三角部分,使用lower.tir()函數可以選擇矩陣的下三角部分,在括弧中添加diag=TURE參數可以將對角線也選中。

此外還有一些其他的函數

det(h) # 求方陣行列式t(g) # 轉置eigen(g) # 特徵值

數據表的操作

gene_id = c(1:100) # 定義變數gene_id為1到100的序列gene_fpkm = rnorm(100,10,5) # 定義變數gene_fpkm為一個含有100個元素均值為10,方差為5的序列gene_fpkm = abs(gene_fpkm) # 將變數gene_fpkm的元素轉換為其絕對值sample_id = c(rep(1,50),rep(2,50)) # 定義變數sample_id為50個1和50個2的序列sample_id2 = round(runif(100,1,10)) # 定義變數sample_id2為含有100個元素且元素為1到10的均勻分布的整數gene_table = data.frame(gene_id, gene_fpkm,sample_id,sample_id2) # 創建數據表colnames(gene_table) # 查看列名rownames(gene_table) # 查看行名dim(gene_table) # 查看錶的大小table(gene_table$sample_id) # 統計數據表gene_table中的sample_id中含有多少個元素及其重複次數table(gene_table$sample_id2) # 統計數據表gene_table中的sample_id2中含有多少個元素及其重複次數barplot(table(gene_table$sample_id2)) # 使用柱狀圖可視化統計數據

繪製直方圖,並畫出密度曲線

hist(gene_table$gene_fpkm,col = "#00A8E8",border = F) # 繪製直方圖,填充為藍色且不畫邊框abline(v = mean(gene_table$gene_fpkm),col="#003459",lwd=5,lty=3) # 畫出均值線更換顏色且加粗par(new=TRUE) # 使新畫的圖在舊圖上繪製plot(density(gene_table$gene_fpkm),xaxt="n",yaxt="n",bty="n") # 繪製密度曲線去除坐標和邊框

R的循環

d <- seq(from=1,to=100,by=5) # 定義變數d為1到100每隔5取一個元素的序列for(i in d){ # 以變數d的元素循環 if(i >= 50){ # 如果i大於等於50 print(i) # 輸出i }}

R語言中定義函數

my_ABS <- function(x){ # 定義函數my_ABS為求x的絕對值 if(x <= 0){ -x }else{ x }}my_ABS(10)my_ABS(-10)

在R中使用?加函數名就可以查詢函數的使用方法,使用example()就可以查詢函數的示例。

R語言基礎繪圖系統的應用

使用R語言基礎繪圖系統繪製RNA-Seq基因表達量的散點圖

rm(list=ls()) # 清除變數cuffnorm_result = read.csv(file="~/DATA/DATA1/edu/R/cuffnorm_genes_fpkm.csv") # 打開表格,並將其定義為cuffnorm_resulthead(cuffnorm_result) # 查看cuffnorm_result的前幾行x.vector = cuffnorm_result$Empty_KD_0 # 定義變數x.vector為表格的Empty_KD_0列y.vector = cuffnorm_result$Empty_KD_1 # 定義變數x.vector為表格的Empty_KD_1列plot(x=log2(x.vector+1),y=log2(y.vector+1),col=rgb(0,0,1,0.05),pch=16) # 畫出散點圖,且點為藍色實心點,透明度為0.05abline(a=0,b=1,lwd=3) # 畫出對角線,加粗text(x=1,y=10,round(cor(log2(x.vector+1),log2(y.vector+1)),2)) # 計算x與y的相關關係並在圖上標出結果

散點圖

使用R語言基礎繪圖系統繪製火山圖

rm(list=ls())# 打開文件讀取表格並定義變數cuffdiff_result = read.table(file="~/DATA/DATA1/edu/R/gene_exp.diff",header = T)wt_FPKM = cuffdiff_result$value_2treat_FPKM = cuffdiff_result$value_1log2_foldchange = log2(treat_FPKM / wt_FPKM)# 去除異常點log2_foldchange[wt_FPKM == 0] = 0log2_foldchange[treat_FPKM == 0] =0# 顯著標紅的點所需要滿足的篩選條件1.p-value <= 0.05, 2. wt,treat FPKM > 0 3. fold change > 2 OR 0.5,並進行點的篩選log10_p_value = log10(cuffdiff_result$p_value) * -1select_sign_vector = (cuffdiff_result$value_1 > 0) & (cuffdiff_result$value_2 > 0) & (abs(log2_foldchange) >= 1) & (cuffdiff_result$value_1 >= 1 | cuffdiff_result$value_2 >= 1) & (cuffdiff_result$p_value <= 0.05)log10_p_value.filter = log10_p_value[log10_p_value >= 0.001]log2_foldchange.filter = log2_foldchange[log10_p_value >= 0.001]select_sign_vector.filter = select_sign_vector[log10_p_value >= 0.001]col_vevtor = rep(rgb(0,0,1,0.1),length(log2_foldchange.filter))col_vevtor[select_sign_vector.filter] = rgb(1,0,0)# 繪製散點圖plot(x=log2_foldchange.filter,y=log10_p_value.filter, xlim = c(-4,4),ylim = c(0,4), col=col_vevtor,pch=16)# 繪製輔助線abline(h=-1 * log10(0.05),lwd=2,lty=3,col="#4C5B61")

火山圖

動手自己寫一個熱圖繪製工具,並可視化3D 基因組 Hi-C的數據~

rm(list=ls())# 讀取文件表格並將其設置為一個矩陣hic_mat.raw = read.table(file="~/DATA/DATA1/edu/R/chr_16_100000_MAPQ20.txt",sep = ",",header = F)input_matrix = as.matrix(hic_mat.raw)# 設置畫布的大小x_size = dim(input_matrix)[1]y_size = dim(input_matrix)[2]# 設置小格子坐標my_xleft = rep(c(0:(x_size-1)),each = x_size)my_xright = my_xleft + 1my_ybottom = rep(c((y_size-1):0),y_size)my_ytop = my_ybottom + 1# 設置每個小格子的顏色mat.max = quantile(input_matrix,prob=0.90)input_matrix.rate = input_matrix / mat.maxinput_matrix.rate[input_matrix.rate>1] = 1col.mat = rgb(1,0,0,as.vector(as.matrix(input_matrix.rate)))# 繪製熱圖plot(x=c(0:x_size),y=c(0:y_size),type="n",frame.plot = F,xaxt="n",yaxt="n",xlab="",ylab="")rect(xleft = my_xleft,ybottom = my_ybottom,xright = my_xright,ytop = my_ytop,col=col.mat,border = NA)# 框取230mb到300mb列之間的區域segments(x0 = 230,x1 = 230,y0 = 674,y1 = 604,lwd=3)segments(x0 = 230,x1 = 300,y0 = 604,y1 = 604,lwd=3)segments(x0 = 230,x1 = 300,y0 = 674,y1 = 674,lwd=3)segments(x0 = 300,x1 = 300,y0 = 674,y1 = 604,lwd=3)

Hi-C可視化


推薦閱讀:

可視化:ggplot2包、lattice包、rCharts包
【數據分析·實戰】北京的霧霾是大風吹走的嗎
R語言可視化學習筆記之添加p-value和顯著性標記

TAG:R编程语言 |