1. 程式人生 > >如何高效率學習R?[轉自R語言中文社群]

如何高效率學習R?[轉自R語言中文社群]

學R主要在於5點三階段:
第一階段有一點:

基礎的檔案操作(read., write.)、資料結構知識,認識什麼是資料框(data.frame)、列表(list)、矩陣(matrix)、向量(vector),如何提取(包括which, []等)、置換(t, matrix等)、刪除(-, which等)、運算(+, -, , / , %%, %/%等)、轉換(as.)、修改(edit, fix等)資料(包括單個數、行、列、表、變數),安裝包、呼叫包以及session的儲存。完成這一階段,你就大致能像excel裡處理資料一樣了。

第二階段有三點:

1、學習統計。這是貫穿整個R學習的最重要的一部,很多時候你並不是不知道在哪裡找,怎麼使用某個函式的引數,更多的時候你是不知道某個統計方法的原理,所代表的意義甚至不知道該用什麼方法。所以學習統計學知識往往才是學習R的關鍵,之後找函式、怎麼用其實都是傻瓜式的,並不需要你從頭編寫演算法。這部分內容頁要結合每個人要做的事做

2、批量處理。由於R和matlab一樣,注重的是批量處理,而且R之中的迴圈往往效率極低,所以在R之中如果你發現你要使用雙層迴圈的時候,就要想想了,有沒有批量處理的方法。

a、首先,幾乎所有的R裡的運算子和自帶的函式都是可以批量處理的。比如向量a+向量b是指每個元素按照index相加,所以就沒必要for一下了;

b、其次,R自帶有的apply族函式(因為是一系列以apply結尾的函式,所以稱為apply族),split,以及aggregate函式。這三類就是R自帶的批量處理的利器,學好這三類函式,基本就可以完成絕大部分的資料批量處理了。

c、然後就是reshape2包以及plyr包了,這是批量處理的兩個利器,reshape主要是整形,plyr包基本提供了一套整理資料的理念,學好這兩個包,批量處理將事半功倍。

d、在實際過程中,一些for還是無法避免的。這時候就要考慮用別的語言來處理這部分事情了。比較常用的方法就是用別的語言批量生成R的程式碼,還有就是直接用R呼叫別的語言處理的結果或者用別的語言呼叫R的處理結果。

3、繪圖系統。總結而言,我們可以把R的繪圖系統分成四個:Graphics, lattice,ggplot2以及grid。最好學習順序也是按照這個來。

a、自帶的繪圖系統。這套系統可以完成最基本的事情,其操作也類似於matlab,可以看做是分步驟命令引數式繪圖,基本就是將一系列作圖看做一步步的命令,每一句都幹一件事,然後通過引數調整其中的某個元素的大小、位置、顏色。

b、lattice。繪圖邏輯也同上。只是加了分組繪圖、facet的功能,這些都很實用,其目的就是講自帶函式中需要大量預處理以及多步繪圖的命令用一行命令代替。上手也非常簡單。

c、ggplot2.這是經典的R繪圖包,繪圖哲學是圖層式的,理解成一個一個圖層的覆蓋。這個繪圖系統能做很多事,而且其自帶主題也相當漂亮。有一定的學習難度。

d、grid。grid繪圖系統算是最基元的繪圖命令,很多指令都是從畫圓、直線、矩形開始的,這算是R裡最好理解但也是最複雜的繪圖系統。適合想入深坑的人士學習,如果要自由創造一些新的圖形,或者編寫繪圖包,這是必學的繪圖系統。另一個值得說的就是grid中也有專門用來整理拼圖的指令,這個對於有一些論文拼圖需求的人來說還是學學比較好。

如果你完成了以上兩個階段,你已經可以在工作學習中完成絕大部分的工作。但如果你是知識的創造者,或者是個程式設計師,或者是要實踐自己的演算法、理論、統計方法、繪圖方法,或者亦或是你只是腦抽了,那就要進入第三階段的學習。這部分包括,C語言掌握與精通、R語言除錯、改進、編寫包、寫一個地道的幫助文件、推銷自己的想法。這一階段完成了,你也就是一個R語言的大牛了。少年到處是你可以施展拳腳的地方。

最後是學習資源的問題,總結如下:

1、課程類。 coursera上的課程的確很適合入門。

2、書籍類。建議入門用R語言實戰 (豆瓣),然後想要快速指南式的瞭解R語言的統計應用也可以看複雜資料統計方法 (豆瓣) 。統計學的內容按照自己的需要自行補充,在這裡就補推薦了,推薦了也是和R沒啥關係的。繪圖系統推薦兩本書就夠用了:ggplot2 (豆瓣) 和 R Graphics Cookbook (豆瓣)這兩本也都有中文版可以買到。如果這部分都已經學得不錯了,其實你就不需要書了,直接看R的幫助文件吧,help()或者? XXX 都可以。在此建議用RStudio,可以幫助你很快的檢視幫助,編寫script、斷點除錯等等。

需要補充的是springer出了一系列叫Use R! – Springer 的書,一直有更新,也是免費獲取的,大家可以自己下載。

3、網站類。

一個是部落格,以上已有推薦。

二是問答類的網站。Stack Overflow 和 SegmentFault 都可以嘗試一下。

三是R的journal。題主可以自行在google裡搜尋 R journal 第一個就是。

四是包和函式的搜尋網站Search all R packages and function manuals 。 這個網站提供R裡所有包和函式的搜尋系統。其貼心之處還有(1)提供分類功能;(2)提供下載的排名,每個包的下載時間線。

此外,其實R語言是一門輕程式設計重統計的語言,所以題主完全不需要擔心自己的程式設計基礎。直接做幾個小專案,你會很快上手,千萬不要從教材第一頁讀到最後一頁,那種效率極低,且容易半途而廢。