1 數列分塊入門 從零開始入門R語言程式設計

2021-10-13 19:44:19 字數 4080 閱讀 6929

上期推文介紹了如何使用r語言程式設計進行樣本間相關性分析,主要涉及了r語言矩陣、迴圈、統計分析函式、ggplot2、corrplot等函式包的使用,涉及的知識面較多,如果不是經常做生物資訊或者是程式設計出家,很難在短時間內適應程式設計模式。其實,一旦適應了程式設計,很多問題都能輕鬆迎刃而解。畢竟計算機語言也是一門語言,和人與人之間打交道一樣,人與計算機打交道也是很容易的。本次推文以引導大家入門r語言程式設計為目的,用盡可能精煉的內容教學r語言。認識r語言首先認識r語言的資料型別及控制結構。掌握這些基礎以後,再認識r語言的函式包。經過一定時間的練習就可以熟悉r語言了。

向量是r語言最基本的資料型別。r語言中向量和大學時候學的線性代數一樣,是由一行或者一列資料組成的變數。

#把向量賦值給x,c是連線函式。此時x就是由數字1到5組成的向量

x1,2,3,4,5) 

#獲取向量長度

length(x) 

#x的第三個元素

x[3]

#刪除x前兩個元素

x[-1:-2] 

#刪除x前兩個元素並儲存

xx[-1:-2]

#seq是生成等差數列函式,from是數列起始值to是終止值,by是公差

bq(from=1,to=100,by=2) 

r語言矩陣可以理解為多個長度相同的向量按照行或列排列而成的多維向量,r語言矩陣與線性代數中的矩陣稍有不同,不同點在於矩陣的乘法計算上,線性代數中矩陣乘法計算方法為設a為 mxp 的矩陣,b為 pxn 的矩陣,那麼稱 mxn 的矩陣c為矩陣a與b的乘積,其中矩陣c中的第 i行第 j列元素可以表示為但是r語言中矩陣乘法是對應元素做乘積。舉例為

#將兩個向量按列**可得得到矩陣,如果想按照行向量**為矩陣用rbind函式

f1,2,3),c(4,5,6))

z1,2,3),c(4,5,6))

f*z[,1] [,2]

[1,]    1   16

[2,]    4   25

[3,]    9   36

#另外一種矩陣賦值方式,ncol定義矩陣的列數,nrow定義矩陣行數,另外ncol(x)或者nrow(x)則可以求矩陣的列數或行數。

x1,2,3,4,5,6),ncol=2,nrow=3)

#檢視矩陣第1行第2列元素,當然如果想檢視矩陣第一行則為x[1,]檢視第二列為x[,2]。

x[1,2]

列表是一種特殊的向量,不同之前的向量。之前的向量可以理解為原子型,列表中可以儲存為不同格式的資料。可以是字串型、數值型等。舉例為

#下面的name,salary,union理解為列表的標籤,等號後面的量理解為列表標籤的值,可以乙個標籤對應多個值,但是列表的標籤具有唯一性!

j"joe",salary=55000,union=t)

#names函式獲取列表的所有標籤。當然如果想使用其他方法查詢列表第2個標籤可以使用就j$salary,j[2],或者j[[2]]。兩者的區別讀者可以通過實踐發現。

names(j)

資料框與矩陣有很多相似之處,很多矩陣適用的函式資料框同樣適用。與矩陣不同的是,資料框裡面的資料型別可以不一致,但矩陣維數必須相等,即各列資料長度相等。以乙個例項簡單介紹資料框

因子在實際的資料分析中用到的場合不多。在r語言中,因子(factor)表示的是乙個符號乙個編號或者乙個等級。以乙個實際例子讓讀者理解因子。

x100,1,4,9,1320)

#對向量x進行因子化處理

x[1] 100  1    4    9    1320

levels: 1 4 9 100 1320

從例子中可以看出,因子實際是為向量資料中的每乙個元素賦予乙個級別。例如元素100,它對應的level是100,比第二個元素1對應的level大,所以在level的排序上,100在第三個level上。

常用的兩種控制結構為判斷和迴圈,簡單地說掌握了基本控制結構和r語言的資料型別是可以進行資料分析的,畢竟任何一種程式語言只要掌握了語法,剩下的就看個人的數學與邏輯素養了。

1.判斷結構:通常為if(條件)else型別,也有if…else if…else。也可以只有乙個if。舉例介紹判斷結構語法,輸入乙個數,如果它大於等於10,輸出y,如果大於等於5小於10輸出t,否則輸出n

xif(x>=10)else if(x<10 && x>=5)else

2.迴圈結構:r語言中for迴圈使用較多,通常結構為for(條件)。以簡單例子舉例for迴圈語法,定義乙個數值向量,將向量中每個元素的平方賦值給新向量。

xyfor (i in 1:length(x)) 

print(y)

[1]  1  4  9 16 25 36 49 64 81

以上是r語言程式設計入門最基本的語法,只有逐漸熟悉這些語法,才可以更進一步使用r語言,下面以上次推文的資料為例子,為大家講一下如何綜合運用r語言知識。上次的推文中是利用rna-seq的reads count資料計算樣本間的重複性分析。另外小明師兄的上篇推文rna-seq中的那些統計學問題(一)為什麼是負二項分布,這篇推文從統計學角度出發推理論證了rna-seq的reads count資料為什麼符合負二項分布,下面我們從r語言程式設計開始利用實際rna-seq的readscount資料證明一下為什麼是負二項分布

根據負二項分布的性質,均值和方差為將p用u表示並帶入方差表示式得到

根據數學知識可以看出方差是均值的二次函式。所以我們這次綜合利用r語言程式設計的知識進行證明。

#讀取readscout資料

readcount"readscount.txt",header=t,sep="\t")

#由於第2到4列是乙個處理的三個生物學重複,所以就以這三個生物重複的readscount值進行分析

readcount2:4]

#過濾掉全為0的行

readcount1,] 

#先定義儲存每個基因表達均值的變數x

x#定義儲存每個基因表達方差的變數y

yfor (i in 1:nrow(readcount)) 

#將x和y**為資料框

datadata.frame(x=x,y=y)

#求基因表達均值的分位數,quantile函式是求分位數函式,na.rm=t是移除na值,這裡的目的是去除掉太大或者太小的資料

adata[,1],c(0.25,0.75),na.rm = t) 

#求基因表達方差的分位數

bdata[,2],c(0.25,0.75),na.rm = t)

#將data資料框中的基因表達均值列滿足在25%~75%分位數之間的行保留

datadata[data[,1]<=as.numeric(a[2]) && data[,1]>=as.numeric(a[1]),]

#將data資料框中的基因表達方差列滿足在25%~75%分位數之間的行保留

datadata[data[,2]<=as.numeric(b[2]) && data[,2]>=as.numeric(b[1]),]

#使用ggplot2繪製均值-方差散點圖,並進行擬合,擬合方法為平滑曲線擬合

從中看出,儘管過濾掉部分資料後還是存在個別極端資料,總體的資料分布曲線滿足二次函式分布。

理解r語言程式設計的五個資料結構:向量、矩陣、列表、資料框、因子,以及兩種控制結構,迴圈和判斷。

入門 1 從零開始的HTML

html hypertext markup languge 超文字標記語言。乙個標籤被解析後會顯示標籤要表達的內容。單單乙個標籤就可以解釋成一張。總結 html標籤內存放各種元素的集合,是乙個資訊的載體 讀取,整理,計算顯示並渲染到頁面上 解析,渲染 瀏覽器與對應核心 瀏覽器核心firefox ge...

LOJ 數列分塊入門 1

link 優雅的暴力,對於乙個數列,他不是乙個元素乙個元素處理,而是分成若干塊,成塊成塊的處理,以此達到降低時間複雜度的目的。首先,我們需要處理劃分的塊的大小 block 一般是根號n 塊的數目 每乙個元素對應第幾塊,然後,每一塊的左端點和右端點。完整的塊 更新 我們用lz i lz i lz i ...

分塊系列 數列分塊入門1 解題報告

區間加法,單點求值。數列分塊是個好東西。我這裡詳細介紹一下分塊演算法,便於初學者的理解 我這個蒟蒻原來也是看不懂分塊 先把陣列分成幾個塊塊,然後就可以對它們整體操作啦。也就是說,把乙個長度為的陣列,拆分成乙個個長度為sqrt n 小塊 當然,最後一塊可能不完整,但是不用管 記錄每個數所屬的塊 也就是...