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

2020-12-06 小曾趣談

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

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語言或者這篇文章其他內容也可以談一談~

相關焦點

  • C語言基礎:以實例跟我學while循環結構,計算圓周率pi
    循環結構是程式語言中的一種基本程序結構,C語言中有兩種表示方法,分別可通過for循環和while循環結構實現。上篇文章已經講了for循環的使用方法,詳細請參考:這次通過一個計算圓周率pi的例子給大家介紹C語言中while循環結構的編程方法。
  • R語言-stringr-字符串處理
    資料:基礎用法字符串處理的難點,個人覺得在於【正則表達式】的掌握程度,但是需要用到正則表達式時都是比較複雜的字符處理工作,在實際商業文本數據中,不用轉義路徑複製和直接可用charchar <- r"(我是一名'R語言'學習者)"cat(char)常用函數截取字符串,匹配字符串,添加指定字符籌齊長度,去除左右兩邊空格,分割字符串,
  • r語言有什麼優劣勢及R語言的未來發展趨勢_R語言在現實中的應用
    前言 R程式語言在數字分析與機器學習領域已經成為一款重要的工具。隨著機器逐步成為愈發核心的數據生成器,該語言的人氣也必然會一路攀升。不過R語言當然也擁有著自己的優勢與缺點,開發人員只有加以了解後才能充分發揮它的強大能力。
  • R繪圖:一文了解ggplot2顏色的設置
    R繪圖往期回顧:ggplot2繪圖學習 兩個連續性變量ggplot2繪圖學習:單變量+繪圖背景R繪圖:ggeconodist,基於ggplot2的另類箱圖R語言學習系列之「多變的熱圖」螞蟻金服在線可視化引擎 G2R繪圖:無與倫比的華麗風行(桑基圖)R繪圖:相關性分析與作圖(單基因相關性)R繪圖:相關性分析與作圖R繪圖ggsci: 高大上的論文配色,一文解決配色問題R繪圖 ggpubr: 為學術而生TCGA數據分析系列之火山圖R繪圖 雷達圖-單基因泛癌差異表達的另類展現形式
  • 入門| 簡易指南帶你啟動 R 語言學習之旅
    R語言裡的for循環可以在任何列表或矢量中執行。for(iin1:5){print(i)}上述代碼是在R語言裡聲明for循環的例子,for循環讓循環變量i在給定的範圍內迭代。12345幾種實現for循環的方法。
  • r語言的p值檢驗 - CSDN
    輸入1: rdata = matrix(rnorm(1000* 6, 0, 3), 6) rvar = apply(rdata, 2, var) mean(rvar)結果1: 前文連結:醫學統計與R語言:多列分組正態性檢驗醫學統計與R語言:標準Z值一定服從標準正態分布?
  • 助您一文掌握Python文件的讀寫操作
    【1】文件對象屬性在對象程式語言中,對象創建後肯定具備屬性。Python自然也不例外。【2】文件對象常用方法Python提供了豐富的文件對象操作方法。【3】文件打開方式首先看看文件的打開方式:文件分為文本文件與二進位文件,在Python中這兩類文件的處理流程是一致的。
  • r語言work_r語言work函數 - CSDN
    R的源起R是S語言的一種實現。S語言是由 AT&T貝爾實驗室開發的一種用來進行數據探索、統計分析、作圖的解釋型語言。最初S語言的實現版本主要是S-PLUS。S-PLUS是一個商業 軟體,它基於S語言,並由MathSoft公司的統計科學部進一步完善。
  • 9 本優秀的 R 語言免費電子圖書
    R語言是主要用於統計分析、繪圖的語言和操作環境。 R本來是由來自紐西蘭奧克蘭大學的Ross Ihaka和Robert Gentleman 開發。
  • 醫學統計與R語言:GiViTI Calibration Belt
    https://cran.r-project.org/web/packages/givitiR/vignettes/givitiR.htmlNattino, G., Finazzi, S., & Bertolini, G. (2016).
  • 語言趣談:掌握多國語言的幾位中國人,有一位是「世界老鄉」!
    最近有個柬埔寨的小男孩在網絡上火了,他在給遊客兜售東西,會講漢語、英語、法語、日語、泰語、馬來亞、菲律賓語等多國語言,甚至還會粵語,非常令人震驚,想想很多人想學一門外語都花費了大量的時間和精力,要掌握這麼多國語言真是比登天還難啊!
  • 業界| 四大機器學習程式語言對比:R、Python、MATLAB、Octave
    作者列出了這些語言(工具)的優缺點,希望對想開始學習它們的人有用。開源包多 成熟的量化交易包(quantstrat、quantmod、performanceanalyitics、xts) 社區最大 使用 rcpp 可以整合 R 和 C++/C 缺點: 比 Python 慢,尤其是在迭代循環和非向量化函數中
  • R語言中repeat循環的使用方法之素數和斐波那契數列前n項
    R語言提供了三種循環方法:for循環、while循環和repeat循環。for循環和while循環在本號前面兩篇文章已經介紹過了,這篇文章將詳細介紹repeat循環的使用方法。repeat循環概述repeat循環的語法格式如下:repeat{ 循環語句 }repeat循環是一種無條件循環,它需要在循環體中設置終止條件,並使用break語句進行退出。其執行過程可以使用下圖來表示:
  • R語言從入門到精通:Day10-R語言統計入門代碼大全
    接下來的幾次教程內容就是為了解決這些問題,我們會逐步學習R語言中的一些統計方法,希望大家在學習新內容的同事,也可以回顧一下自己之前學過的統計學課程。本次教程將主要關注R語言中生成基本的描述性統計量和推斷統計量的R函數。  寫在開篇的話,本篇教程內容較多,請務必靜下心來學習。
  • R語言——交叉驗證法計算線性回歸模型擬合優度的第三種R方
    本來打算這周繼續更新一篇LaTex的小短文,但是貌似我已經很久沒有寫R語言相關的東西了。想來想去,今天就寫一篇和R語言有關的,畢竟不能忘記初心呀!凡是學過計量的同學,哪怕只記得一點點皮毛,對於R方和調整R方也應該是再熟悉不過了。R方和調整R方是判斷回歸模型擬合度的最為方便簡單的指標,一般來說,數值越大代表模型的擬合度越好。
  • r語言一元回歸模型專題及常見問題 - CSDN
    一元線性回歸分析首先介紹回歸分析中最基礎的情況:一元線性回歸分析。它規定模型f函數只能是y=k*x+b的形式,即只使用一個變量x(故稱為一元)的線性形式來預測目標變量y。6.1.1引例利用某網站歷次促銷活動中促銷讓利費用和銷售金額的數據(單位是十萬元),將使用該數據集來說明線性回歸分析的應用。
  • 一文讀懂浮點數
    ,繼續循環操作;如果 r < 1,則記下 0,令  ,繼續循環操作;如果 r = 1,則記下 1,計算結束。計算過程的偽代碼如下: r = n * 2  // n 是十進位的小數 s = "0."   // s 是最終結果,用字符串表示 while r !
  • 一文掌握定向耦合器設計
    第一條路徑的波程為四分之一波長,第二條路徑的波程為四分之三波長,波程差為二分之一波長,對應的相位差為180°。相位相反,互相抵消。當兩路信號的幅度完全相等時,完全抵消。那麼埠(4)就是定向耦合器的隔離端。
  • R語言 | 小提琴圖
    比如,我們以R語言中的內置數據集iris為例,比較幾種不同花的花萼長度(Sepal.Length),通常會使用下圖。箱式圖能夠提供中位數、四分位數等的信息,但是不能直觀的表現出具體數據分布情況。而小提琴圖則能夠彌補這一點,而且小提琴圖比箱式圖要美觀不少。雖然目前小提琴圖不如箱式圖使用普遍,但是越來越多的文章中出現小提琴圖。使用小提琴圖會使文章增色不少。
  • R語言有多強大?十個你不知道的功能
    R語言有多強大?十個你不知道的功能 R語言有多強大?幾行甚至一行R代碼就可以支持網絡應用的運行   另外一個很酷的功能是,通過rsconnect包,R語言還可以僅用一兩行代碼就支持網絡應用的運行。這些應用既可以通過自己的伺服器來支持,也可以用shinyapps.io這種雲伺服器。   4.