R語言是進行統計分析和可視化的優秀語言(其實機器學習和網頁制作也可以用R,小聲說~|ω`))
R語言
相信大家在利用R語言進行數據分析的時候可能會有大數據分析需求。所謂大數據,很好理解,就是大樣本高維度數據,這樣的數據在當今信息爆炸時代,很是常見。比如醫學數據,數據量大,維度極高,因為醫學的檢測指標多,而且隨着基因測序特別是二代測序等高通量測序(High-throughput sequencing)技術的普及,能一次測上萬的基因,這樣就有幾萬的維度;各種真實世界的統計數據,這些數據比如汽車損耗、公司盈虧也有着大樣本的特點。
那么大數據如此的多,批處理的需求就比較大了。R語言不考慮並行運算下的簡單批處理實現方式就是for循環。
所以,今天就來教大家怎樣掌握R語言的for循環o(^▽^)o
首先,你需要一個R,百度"R"就行,點擊有官網標識的網站,進去下載就行
打開R或rstudio(都行,小編喜歡rstudio,支持代碼補全、鼠標操作GUI等功能,用過就不再想用普通的R了)
rstudio
在左側光標處就可以輸入你的代碼了
for循環基本結構如下
for(變量 in 值){}
for循環的邏輯是設定一個變量如x,x的改變范圍在5到20(這個可以自己設),那么R就會自動執行{}里的內容,按x遞增1的順序執行,一直從5,6,7...到20為止。
那么接下來,小編就通過一個具體的例子來講解for循環(′▽`〃)
代碼都是本人自己寫的哈~
首先編一個二維矩陣數據,這樣的數據是很常見的(如果有現成的文件也可以用read.csv/read.table/read.delim讀入data.frame格式的數據,再用as.matrix函數轉為矩陣)
#這步是新建一個名為data的矩陣,matrix函數后面的c(1:5000)是矩陣填入的數據,是從1,2,3...一直填到5000,nrow是矩陣的行數,可以理解為number of rows,ncol是矩陣的列數,可以理解為number of columns,所以明白了為啥要填5000個數了吧(`)
data <- matrix(c(1:5000),nrow = 100,ncol = 50)
可見1到5000是按列填充的,這就是R語言的一個特性,默認優先進行列運算~
我現在想要進行for循環了,首先明確我的目的是想計算每一行之間的pearson相關系數和P值,最后得到一個4列的data.frame並輸出為csv,可用excel進行進一步編輯。4列的data.frame每一列依次是某一行的行名、與前者進行相關分析的另一行的行名、pearson相關系數、P值,那么讓我們開始~
N1=c("gene1") #首先把最后4列的data.frame表頭設定好,我這里用基因1表示,可以隨你換
N2=c("gene2")鄭州看心理醫生哪家好http://www.hyde8871.com/
R=c("r") #相關系數
P=c("p") #P值
for (r in 1:nrow(data)){ #在下面的{}內r的范圍從1到data的行數,即100
for (t in r:nrow(data)){ #在下面的{}內t的范圍從1到data的行數,兩個for疊加的話,先固定第一個for r=1再執行下一個for,直到下一個for的r從1到100都執行完后再跳到第一個for r=2,再執行r從1到100,再r=3以此類推直到r=100,整個for循環就結束了。這里用兩個for很巧妙,這樣可以規避計算了第r行與t行的相關數據及第t行與r行的相關數據,造成人為的重復運算
N3=rownames(data)[t] #data行名的第t個數據,這個很好理解,data行名rownames(data)是一個有100個數據的向量vector,從1到100依次是每一行的行名,這里[t]就取第t個數即第t行行名
N4=rownames(data)[r] #同上取第r行行名
R1=cor(as.numeric(data[t,]),as.numeric(data[r,]),method="pearson") #cor函數計算pearson相關系數,參數里依次是向量1,向量2,運算方法這里是pearson,向量1這里是data第t行的數據,保險起見轉為了numeric即數值型,向量2這里是data第r行的數據
P1=cor.test(as.numeric(data[t,]),as.numeric(data[r,]),method="pearson")[[3]] #結構同上,這里是得到P值
N1=c(N1,N3) #把N1和N3合並為N1,這里N1最開始是gene1,后來每運行一次,就加上一個新的N3,也就是每運行一次,就得到長度加一的向量,加的部分就是相關分析中前者的行名
N2=c(N2,N4) #把N2和N4合並為N2,這里N2最開始是gene2,后來每運行一次,就加上一個新的N4,也就是每運行一次,就得到長度加一的向量,加的部分就是相關分析中后者的行名,注意N1和N2的順序是一一對應的,因為N1和N2的順序就是每次運行的順序,即N1和N2的第3個數據都是第2次運算的結果
R=c(R,R1) #把N2和N4合並為R,這里R最開始是r,后來每運行一次,就加上一個新的R1,也就是每運行一次,就得到長度加一的向量,加的部分就是相關分析中相關系數
P=c(P,P1) #把N2和N4合並為P,這里P最開始是p,后來每運行一次,就加上一個新的P1,也就是每運行一次,就得到長度加一的向量,加的部分就是相關分析中的P值,注意R和P及N1、N2都是一一對應的,理由同上
