掌握R語言for循環一文就夠了(認真臉)

2020-12-11 小曾趣談

嗨,大家好,我就是帥氣的小編~

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")

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都是一一對應的,理由同上

}

}

Q=data.frame(N1,N2,R,P) #最後把N1,N2,R,P向量按列合併創建成data.frame,因為R和P及N1、N2都是一一對應的,按列合併不會打亂順序,至於為啥是按列,這裡就是前文說的R語言特性~

write.csv(Q,file="G:/PR1.csv") #輸出為csv

結果

這就是結果,為啥N1,N2不變呢?因為沒有設定行名所以每次運算的N3、N4都是空的,所以N1,N2一直都是gene1和gene2。為啥R為1P為0呢?因為看了data就知道了(o)

data

怎麼樣,R語言for循環有意思吧︿( ̄︶ ̄)~,你學會了嗎?不妨用自己的數據試試~

最後,學習程序語言,小編覺得理解代碼邏輯非常重要(來自一個自學R語言、生物信息學和機器學習的臨床醫學生)

小編資料——武漢大學臨床醫學專業在讀,已發表多篇SCI論文。這是小編的第一篇文章,希望大家多多關注、支持,你們的支持是我走下去的動力

你們還想看怎樣的文章,不妨在評論區談一談,對於R語言或者這篇文章其他內容也可以談一談~

相關焦點

  • 一文掌握SVM用法(基於R語言)
    這是生信技能樹 一文 系列推文,前面的目錄:一文學會WGCNA分析一文看懂主成分分析SVM
  • R語言從入門到精通:Day6-R語言數據操作進階及控制結構
    最近經過前面幾次推文的學習,我們的R語言教程已經講解了快1/3的內容,相信大家對R語言已經有了初步的了解,特別是感受了R語言在數據處理領域的強大功能
  • 如何使用C語言FOR循環,看這裡,C語言FOR循環快速掌握
    C語言作為近年來較為火熱的程式語言之一,一直都深受大家的喜愛,其簡單易懂的界面設置,以及簡單好上手等特點更加讓我們使用得心應手。而for循環更加是初期C語言學習的裡程碑,只有將for學會,才能夠更好的邁向C語言的殿堂,那麼就來學習一下簡單的C語言for循環。
  • 乾貨 掌握R語言中的apply函數族
    前言剛開始接觸R語言時,會聽到各種的R語言使用技巧,其中最重要的一條就是不要用循環,效率特別低,
  • C語言執行效率如何保證,看這一文就夠了!
    舉例如下,將數組一賦值給數組二,要求每一字節都相符。否則,請在函數一開始把指針指向的數據保存到本地變量。如果需要的話,在函數結束前拷貝回去。void isqrt(unsigned long a, unsigned long* q, unsigned long* r){  *q = a;  if (a > 0)  {    while (*q > (*r = a / *q))    {      *q = (*q + *r) >> 1;    }  }  *r = a -
  • R語言對接高級語言Fortran
    (1)Fortran是當之無愧的性能之王,在本文的測試中可以看到Fortran代碼的效率是Rcpp的2倍、Julia的4倍、python的30倍、R語言的90倍。在for循環密集的代碼中,Fortran可以輕鬆達到R語言的200倍;(2)很多古老的、但專業上通用的模型採用Fortran語言編寫,翻譯成其他語言,人力所不能及。為何對接到R語言?
  • 嵌入式C語言執行效率如何保證,看這一文就夠了!
    舉例如下,將數組一賦值給數組二,要求每一字節都相符。否則,請在函數一開始把指針指向的數據保存到本地變量。如果需要的話,在函數結束前拷貝回去。void isqrt(unsigned long a, unsigned long* q, unsigned long* r){  *q = a;  if (a > 0)  {    while (*q > (*r = a / *q))    {      *q = (*q + *r) >> 1;    }  }  *r = a -
  • R語言之控制流的使用方法
    一般在數據處理或建模過程中會使用到R語言中的控制流,控制流主要有以下三類,即1)
  • R語言做深度學習
    它是RStudio公司開發一個R包,是Keras深度學習框架的R語言接口,利用這個包,就可以在R平臺上面編寫代碼,使用這個高級的神經網絡API。 Keras的開發重點是實現快速實驗,支持基於卷積的網絡和循環網絡(以及兩者的組合),並在CPU和GPU設備上無縫運行。如何用R語言做深度學習?
  • R語言-安裝使用指南
    R語言 概述R語言是用於統計分析,圖形表示和報告的程式語言和軟體環境。
  • C語言基礎:以實例跟我學while循環結構,計算圓周率pi
    循環結構是程式語言中的一種基本程序結構,C語言中有兩種表示方法,分別可通過for循環和while循環結構實現。上篇文章已經講了for循環的使用方法,詳細請參考:這次通過一個計算圓周率pi的例子給大家介紹C語言中while循環結構的編程方法。
  • R語言包,掌握這10個就夠了!(含資源下載)
    一、數據可視化ggplot2ggplot2是最常用、最受用戶們喜愛的作圖工具包了,被譽為數據作圖的標杆。它做出的圖不僅漂亮,而且可以涵蓋很多複雜的信息。網上也有大量關於它的教程,學習資源很豐富。gridExtraggplot2的一個缺點就是不能像自帶的graphics基礎包那樣,把幾張圖拼成一組圖。而gridExtra就可以解決這個問題,把ggplot2做出來的漂亮的圖組織到一張大圖裡。
  • 【R語言學習】R語言概述與軟體下載安裝
    但是R軟體的使用需要編程基礎,因此R語言的學習就顯得尤為重要。科研創新服務平臺擬結合R軟體開展一系列R語言學習教程,旨在幫助科研人員儘快了解R語言在生物醫學領域中的應用,敬請期待!R語言是用於統計分析,圖形表示報告的程式語言和軟體環境。
  • 【R知識】R語言apply函數族筆記
    為什麼用apply因為我是一個程式設計師,所以在最初學習R的時候,當成「又一門程式語言」來學習,但是怎麼學都覺得彆扭。
  • R語言-stringr-字符串處理
    資料:基礎用法字符串處理的難點,個人覺得在於【正則表達式】的掌握程度,但是需要用到正則表達式時都是比較複雜的字符處理工作,在實際商業文本數據中,不用轉義路徑複製和直接可用charchar <- r"(我是一名'R語言'學習者)"cat(char)常用函數截取字符串,匹配字符串,添加指定字符籌齊長度,去除左右兩邊空格,分割字符串,
  • 左手用R右手Python系列——循環中的錯誤異常規避
    上一講講了R語言與Pyhton中的異常捕獲與錯誤處理基本知識,今天以一個小案例來進行實戰演練,讓你的程序遇水搭橋,暢通無阻。
  • R語言中for循環的使用之典型案例應用
    for在R中是一種循環語句,即在一定條件下,反覆執行相同的語句。for循環的與法格式為:for(var in seq) { expr }其中,var為循環變量;seq為向量表達式,通常是一個序列。其執行過程為,每次從seq中取一個值放入var中,並在循環體expr中進行使用。
  • R語言——使用apply function替代for loop循環語句
    既然難的做不了,今天就先講個簡單的,R語言裡面for loop的替代者apply function。當想到循環的時候,我們一般都是指for或者while等等。雖然我個人非常喜歡使用for loop,但是不得不承認,for loop的運算速度相對來說並沒有那麼快。
  • 一文讀懂 Gage R&R
    一、「生產」數據要對測量系統的重複性和再現性進行分析,需要精心設計一個過程;參考AIAG MSA手冊,推薦按以下步驟進行:Step 1:召集團隊,介紹GageR&RStep 2:選擇分布在公差範圍內的10個零件(零件間差異要代表過程正常的波動
  • R語言從入門到精通:Day1-R語言的安裝
    ~由於大家的電腦設備都不全一樣,特別是作業系統,windows、Mac等,為了方便大家學習,我們在兩個作業系統中分別 錄製了教學視頻 ,方便大家反覆觀看學習,見文末視頻。R軟體呢,就是R,現在最新的版本是R 3.6.1,它就是編譯和運行R代碼軟體,其官方網址我們要記住:https://www.r-project.org/。