1. 程式人生 > 其它 >R語言學習入門

R語言學習入門

R語言的起源

R語言主要受S語言( 1976年John Chambers在貝爾實驗室建立)和Scheme語言(20世紀70年代在麻省理工學院AI實驗室的Guy L. Steele和Gerald Jay Sussman建立)影響發展而來,主要使用者為統計學家和資料分析人員,常用於統計分析和圖形視覺化。早期R是基於S語言的一個GNU專案,所以也可以當作S語言的一種實現,通常用S語言編寫的程式碼都可以不作任何修改的在R環境下執行。

R本來是由來自紐西蘭奧克蘭大學的Ross Ihaka和Robert Gentleman開發.[因兩人名字都是以R 開頭 所以也因此形象稱為R。]

來源:Wiki百科

R語言的應用

R語言的主要應用方向:統計分析(如統計檢驗)和數學建模、資料視覺化以及其他(如資料收集與清洗、網頁等互動式應用開發等)。

就統計分析和數學建模來看,R可與流行的商業統計軟體包(如SAS,SPSS和Stata)相媲美,而且是完全免費的。

特別地,因使用者貢獻的第三方軟體包的增長,R的應用範圍得到了極大的擴充套件,R語言的使用者數在近年來迅速增長。截至2018年8月,R在TIOBE指數中排名第18位。

  • CRAN:13095(2018.09.25)
  • Bioconductor:2846(2018.09.25)
  • GitHub、GitLab、Bitbucket等基於Git的軟體倉庫:未統計

其中Bioconductor主要存放與生命科學資料分析相關的R包,包括1562(Software)+ 921 (AnnotationData)+ 342 (ExperimentData)+ 21(Workflow)

如果你是統計學家、數學家、資料分析師、或者是科研人員,掌握R語言對你來說真的是非常有價值的一件事情。

注:TIOBE指數用來衡量程式語言的流行程度。

來源:R : Graphics Tutorial Series ( Part 1 )

來源:clusterProfiler,PDF

來源:ECharts,ECharts2Shiny

來源:Maftools,教程

擴充套件閱讀:Tippmann S. Programming tools: Adventures with R[J]. Nature, 2015, 517(7532):109.

預備知識

瞭解學習的過程

學習的定義:

如果一個系統(機器、人等)能夠通過執行某個過程改進它的效能,這就是學習。

人的學習路徑:學習-實踐-忘記-回顧。

通用的學習技巧和原理:

  • 瞭解基本的概念是學習的第一步
  • 基於你掌握的基本概念去比較、理解和學習有助於學習和理解新的概念
  • 構建屬於自己的知識框架來將零散的知識點進行整合將減少你的遺忘率
  • 經過你深度思考和實踐之後的知識印象最為深刻

如果你已經很久沒有深度的思考過,請在這裡停留一下:上面所列內容是否正確?是否還有其他技巧和原理可以幫助你學習一項新事物?對於R語言的學習,這些技巧和原理怎麼應用?

擴充套件閱讀:娛樂至死,簡單的邏輯學

什麼是知識庫?

通俗一點的講,知識庫(knowledge base)是一種可以讓你在短時間內找到解決某些問題的工具和資源的集合。不管是個人,商業公司、政治團體或者國家主體都可以構建屬於他們自己的知識庫。

比如,基於計算機技術和網路的網際網路就是目前最大的一種知識庫。基於歷史的原因,英語作為全世界使用範圍最廣的語言,其目前在網際網路上的內容產出仍然佔據主導地位。典型的就是科學論文的發表大多以英語為載體第一時間發表(知名的如Web of science資料庫,又常被人叫做SCI資料庫)。

當然,隨著中國網際網路的迅猛發展,中文資料目前也在變得豐富。據統計,2017年中國的網民人數已經達到7.5億。有越來越多的以中文為載體的知識(包括R語言)在知乎,簡書、微信公眾號以及個人部落格和論壇(如,個人部落格:Yihui,生信菜鳥團,我的部落格,論壇:統計之都,生信技能樹)等知識共享平臺上被髮布。

你現在就可以試著去搜索網際網路上與R語言相關的知識。

為什麼要構建和管理知識庫?

我列出了一些為什麼要構建和管理知識庫的原因(不一定全面):

  • 可以有效提高個人或者集體工作效率以及競爭力(利己的角度)。
  • 可以提高知識傳播的效率(知識共享過程),並減少他人獲取相應知識的難度(利他的角度)。

就R語言學習來說,至少可以解決三個非常基本的問題:讓你更快的找到學習資料; 找到一些解決R語言程式執行的錯誤資訊的方法; 利用知識分享這一過程既方便他人學習,也可以加深你對所學知識的印象和理解。

如果之前你在遇到問題後,傾向於第一時間問老師或者別人,我建議你從現在開始,在學習R語言的過程中,遇到問題第一時間去網際網路查詢資料,並將查詢到的資料整合進你的知識庫。如果可能,在經過你的整理、思考和實踐之後,可以將你的一部分經驗以筆記、部落格、視訊等形式分享給他人。

如何管理你的知識庫?

知識庫的管理是一個非常繁雜的問題。不過,當你掌握了適當的方法和工具之後,加上一些堅持,你就可以很好地管理你的知識庫,並進一步幫助你提升學習的效率,有更多的輸入和產出。比如這篇文章本身就是一個小型的知識庫,它也是我的一種分享和產出內容的方式之一。

我這裡列出了我現在使用的一種方案(工具集):

輸入層:

  • 使用Feedly用於RSS訂閱篩選過的閱讀資料。
  • 使用Chrome外掛Memex對所閱讀過的網際網路資料進行全文索引和分類存放。
  • 使用Endnote分類和管理科學文獻、書籍等

輸出層:

  • 使用Notion記錄日程和筆記,其中筆記來源於文字類(書籍、文章)以及視訊(慕課、TED等)。這是我分享的兩個例子:第十五屆研究生數學建模比賽(C題)和Notion的使用體驗。
  • 使用blogdown創作、管理和分享部落格文章。以我的部落格為例。
  • 使用bookdown創作、管理和分享書籍。比如《bookdown: Authoring Books and Technical Documents with R Markdown》這本書。
  • 使用xaringan創作、管理和分享PPT。如文末PPT所展示。

如何學習R?

閱讀書籍

系統閱讀有示例程式碼的高質量書籍是學習R的最佳途徑,其中ORELLY出版的書籍可以優先閱讀。

  • R語言核心技術手冊
  • R語言入門與實踐
  • R資料科學
  • 文字挖掘:基於R語言的整潔工具
  • R書籍視覺化手冊
  • R語言實戰
  • 學習R
  • R packages
  • 統計建模與R軟體
  • 多元統計分析及R語言建模
  • 其他

閱讀線上學習資料

下面我列出了一些與R語言學習相關的文字資料,裡面有一些是其他人分享的他們在學習R語言時遇到的問題,希望你也可以從中獲得一些提示。同時,也可以作為你係統學習R語言的開端。

  • r-bloggers: How to learn R
  • r-bloggers: Tutorials for learning R
  • R Learning Path: From beginner to expert in R in 7 steps
  • Rstudio online-learning
  • Bookdown Home
  • w3cschool: R語言教程
  • CSDN: 聊聊我的R語言學習路徑和感受
  • 知乎:該如何學習 R 語言?

如果你想了解和學習最新發布的R包或者相關統計學方法,單單通過書本和已有的視訊教程是遠遠不夠的,你需要利用二手手游出售平臺地圖所有可以獲得的資源並加以篩選,這樣你才可能更快地獲取到第一手的資訊和知識。

這些資源主要包括以下幾個型別:RSS聚合站點(如R-Bloggers)、個人部落格、論壇(如統計之都、生信技能樹、Biostars、ResarchGate)、GitHub Trend以及最前沿的期刊論文也會不斷有新的R語言相關的學習資源,如繪圖指令碼、資料分析R包等(常見於Bioinformatics、BMC Bioinformatics、Nature Method、Genome Biology、Genome Resarch、Nucleic Acids Research等)。特別地,你可能需要特別關注一下Rstudio公司釋出的一些部落格、視訊和PPT,裡面可能會有值得你學習的一些應用或者程式設計思想。

同時,現在有許多線上網頁應用提供了方便的線上互動式學習方案,可以讓你快速地瞭解和使用R。

  • Learn Data Science Online
  • 實驗樓:R 語言基礎入門

觀看線上學習視訊

現在隨著慕課等線上課堂的興起,越來越多的人選擇以視訊講解開始R語言的學習,比如下面列出的一些網站。不過,正如我前面所說,書籍是第一選擇,儘量是利用這些視訊來輔助你學習書本知識。

  • 網易雲課堂:R語言
  • 騰訊課堂:R語言
  • 中國大學MOOCC:R語言
  • 慕課網:R語言
  • 慕課網:多元統計分析及R語言建模
  • 慕課網:R語言入門
  • 慕課網:R語言入門與進階
  • 慕課網:R語言之資料視覺化
  • Coursera: R programming

學會問問題

對於問問題這件事,真的是被太多的初學者所忽視,這也就導致了很多同學經常無法有效的和老師溝通,或者無法從網際網路上找到他們想要的答案。推薦你看一看這篇文章:提問的智慧。特別是在網際網路社群裡,如果你沒有遵循相應的規則去提問或者反饋,別人有權利不回答你的問題,或者忽視你提出的問題。如果你遵循這些規則,大多數情況下,你會得到善待並獲得相應的迴應,甚至不需要你提問的物件來回答,如益輝的這篇博文所提到的例子。

我們在搜尋R語言相關的問題時,特別是詢問別人問題的時候,一定要清楚的描述你的問題,同時提供你的示例,並說明你已經做了哪些嘗試。

一個好問題的示例:R語言如何去掉一個矩陣裡面所有非數字的元素 (英文:how to remove all non-numeric elements in a R matrix object)。

一個不好的問題:資料清洗怎麼把非數字的值去掉?(這個問題裡面沒有提到你的輸入是什麼?你期望的輸出是什麼?甚至連程式語言的平臺都沒有,我想這樣,你可能會很難通過網際網路快速的找到你想要的答案)。

思考+動手真的很重要

R語言作為程式語言的一種,共享兩個在學習其他程式語言時同樣需要注意的點:

  • 思考
  • 動手

思考是你動手實踐的前提,學習程式設計的時候,請抱著尋根問底的態度去學習,特別是對於一些關鍵概念(比如硬碟、記憶體和CPU、檔案系統、絕對路徑和相對路徑、二進位制和十進位制、編譯和解釋型語言、物件、或與非運算等等)和基本原理。

動手的含義主要在於學習程式設計可能比其他技能更需要你的動手實踐和嘗試。如果你是初學者,請不要直接複製貼上示例程式碼而不做任何其他嘗試。如果從頭到尾只是執行一遍程式碼,你是學不會程式設計的。

練習(問答題)

這篇文章裡沒有涉及具體的R語法知識,但是通過我提供的資料,你已經足夠開始屬於你自己的R語言學習之路。下面我給了你一些習題或者任務,希望可以讓你對R語言的學習有更加具體的目標,並充分利用這篇文章中所傳達的思想。

  1. R語言的前身是什麼語言?主要使用者有哪些?
  2. R語言的“R”有什麼來頭?
  3. 想想R語言最近幾年快速發展的原因有哪些?
  4. 比較Pyhon和R語言二者的異同(如果你還沒有學習過Python,我強烈建議你可以同時學習它,比較學習可以讓你印象更加深刻)。
  5. R語言中最受歡迎的視覺化R包是哪一個?有哪些R包是對它進行了擴充套件?
  6. R語言可以用於統計檢驗的函式有哪些?
  7. R語言可以用於爬取網路資料的R包有哪些?
  8. 託管在GitHub上的R包的安裝方式。
  9. R語言如何處理大資料?比如10GB、100GB、1TB等。
  10. 比較Rstudio server,Shiny server和Opencpu server。

練習(程式設計題)

  1. 比較R語言中apply, sapply, lapply等函式的異同;比較paste和sprintf的異同;以及其他你覺得可以比較的函式。並用R markdown展示他們的區別(可能需要你花一點時間學習Markdown以及R markdown)。
  2. 什麼是正則表示式?R裡面有哪些函式和第三方包(沒有數量限制)可以使用正則表示式。
  3. 完成你的第一個R包(建議你先閱讀與構建R包相關的資料,比如《R packages》這本書),並使用Git進行版本管理,同時上傳至GitHub倉庫(可能需要一些時間同時學習它)。如果你覺得你構建的R包非常有用,可以嘗試提交併分享至CRAN。
  4. 完成你的第一個Shiny應用。
  5. 使用blogdown構建你的第一個部落格應用。
  6. 使用xaringan構建你的第一個Web PPT。
  7. 使用bookdown構建你的第一本書。

蟹蟹

以上就是我為你收集和整理的與R語言學習相關的一些資源和注意事項。

希望這篇文章對你的R語言學習有所幫助。

Web PPT版本,PDF,部落格原文