天天看點

R語言學習入門

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

R語言學習入門
R語言學習入門

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

來源:Wiki百科

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語言學習入門
R語言學習入門

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

R語言學習入門

來源:clusterProfiler,PDF

R語言學習入門

來源:ECharts, ECharts2Shiny

R語言學習入門

來源: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的最佳途徑,其中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語言的學習有更加具體的目标,并充分利用這篇文章中所傳達的思想。

R語言的前身是什麼語言?主要使用者有哪些?

R語言的“R”有什麼來頭?

想想R語言最近幾年快速發展的原因有哪些?

比較Pyhon和R語言二者的異同(如果你還沒有學習過Python,我強烈建議你可以同時學習它,比較學習可以讓你印象更加深刻)。

R語言中最受歡迎的可視化R包是哪一個?有哪些R包是對它進行了擴充?

R語言可以用于統計檢驗的函數有哪些?

R語言可以用于爬取網絡資料的R包有哪些?

托管在GitHub上的R包的安裝方式。

R語言如何處理大資料?比如10GB、100GB、1TB等。

比較Rstudio server, Shiny server和Opencpu server。

比較R語言中apply, sapply, lapply等函數的異同;比較paste和sprintf的異同;以及其他你覺得可以比較的函數。并用R markdown展示他們的差別(可能需要你花一點時間學習Markdown以及R markdown)。

什麼是正規表達式?R裡面有哪些函數和第三方包(沒有數量限制)可以使用正規表達式。

完成你的第一個R包(建議你先閱讀與建構R包相關的資料,比如《R packages》這本書),并使用Git進行版本管理,同時上傳至GitHub倉庫(可能需要一些時間同時學習它)。如果你覺得你建構的R包非常有用,可以嘗試送出并分享至CRAN。

完成你的第一個Shiny應用。

使用blogdown建構你的第一個部落格應用。

使用xaringan建構你的第一個Web PPT。

使用bookdown建構你的第一本書。

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

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

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

繼續閱讀