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繪圖包,繪圖哲學是圖層式的,理解成一個一個圖層的覆蓋。這個繪圖系統能做很多事,而且其自帶主題也相當漂亮。有一定的學習難度。以下就是我用ggplot畫的圖

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

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

由以上內容,可以基本上把學習路徑總結為下圖:

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

1、課程類。 @uhuruqingcheng已經介紹的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語言是一門輕程式設計重統計的語言,所以題主完全不需要擔心自己的程式設計基礎。直接做幾個小專案,你會很快上手,千萬不要從教材第一頁讀到最後一頁,那種效率極低,且容易半途而廢。

關於批處理的解答

有幾位同僚在回覆裡面詢問批處理的問題,這裡做個簡單的解釋。

批處理類似於向量運算,但也有很大差距,簡單的說,是一個函式可以快速的套用到多維變數的每一維值中。

1. 自帶函式的批處理

譬如:

這就是一個最簡單的批處理的例子,結果是

這是一個簡單的向量標量積結果,而所謂的批處理也就是類似於這種處理方式。而在R之中,資料的最小單元其實就是向量,因此,幾乎所有R的函式,都是批處理的。(注意,與matlab不同,matlab最小單元是矩陣,因此,其基本的運算都是基於舉證運算的)。我們可以用以下方式定義批處理函式:如果一個函式F,滿足,

且函式F的實現不基於任何顯式迴圈(諸如for,while, until),則函式F可以稱之為批處理函式。

譬如:plot(將兩個向量的對應的數逐個地畫到圖中),paste(將字串向量的每個字串都做連線)等等。。。

這裡比較一下會更加清楚,譬如如果在python裡實現以上功能(不實用pandas和numpy包),就得采用顯式的迴圈(for,while等):

因此,我們可以看出採用批處理最大的優點在於減少的程式碼量,並且更加簡潔明瞭,易於維護。

2. 批處理是否更加高效

其實批處理的另一個好處就是使得執行更加高效,因為批處理函式往往經過處理(使用更好的演算法或者更底層的實現方式)得到某種程度的提速。我們在這裡測試實現將向量每個元素都自乘2這一功能,分別採用按鍵替換,按數字索引替換以及直接批量處理的方式,來測試不同方式速度是如何的。

結果如下:

明顯看出,批處理並且避免顯式迴圈的方式的確有助於提高速度,程式碼量也少的多。因此,何樂而不為呢?

但是經過測試,並不是每個批處理函式的效果並不是都是那麼明顯,譬如:strsplit。甚至研究碼源之後,你也會發現,很多批處理常用的函式的實現其實都是for,因此,有一派觀點認為避免顯式迴圈(特別是指採用apply函式、plyr包的方法避免顯式迴圈),其實具有一定的誤導性,其是否能提高效率也是要視情況而定。

3. apply族函式和aggregate函式

這是R基礎包自帶的兩類用於批量處理的函式包,在此,只做簡單地介紹:

apply函式族共有五個,分別是:apply,lapply,sapply,tapply,vapply。其總用其實就是將某個函式逐個套用到向量(矩陣)中每個元素之中,其實具體的作用,讀幫助文件就可以了。

aggregate這個函式比較有意思,常用的帶入方式是:

作用就是基於by指定的變數做分組,計算FUN分別統計每個組的結果。

4. 幾個常用的批處理用的包

主要有:

reshape(最好用的是melt)

plyr(__ply族函式是最好用的,有一個很巧妙地邏輯,對於開發軟體包的人來說學習這個包很有啟發性;其次用ts比較多的人最好學一下round_any函式):此包入門有點難,有些人也吐槽效率;round_any+gglot2畫時間序列實在是太佳了。

data.table:這是一個網友的推薦,聽說很好用,效率也提高不少。

相關推薦

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

學R主要在於5點三階段: 第一階段有一點: 基礎的檔案操作(read.*, write.*)、資料結構知識,認識什麼是資料框(data.frame)、列表(list)、矩陣(matrix)、向量(vector),如何提取(包括which, []等)、置換(t, mat

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

學R主要在於5點三階段: 第一階段有一點: 基礎的檔案操作(read., write.)、資料結構知識,認識什麼是資料框(data.frame)、列表(list)、矩陣(matrix)、向量(vector),如何提取(包括which, []等)、置換(t, matrix等)、刪除(-,

Java實現漢字金額轉化()

ack temp string 額的 rep ger poi 輸出 nec package com.xfonlineclass; import java.text.DecimalFormat; import java.util.Scanner; /** * 金額

劍指未來五十年的指令集RISC-V【公眾號 智聯網事】

【轉自微信公眾號 智聯網事】 本文介紹了RISC-V指令集從釋出到目前的發展路程,及基於RISC-V的晶片研發進展及晶片配套軟體開發生態的更新. 文章目錄如下: 一些基本概念 RISC-V 二三事 RISC-V 有多強  ARM的擔憂

一篇文章幫你瞭解LoRaWAN特性【公眾號 智聯網事】

LoRa,相信做小無線開發的朋友都不會陌生,Semtech公司獨有的擴頻調製技術,能夠實現低功耗遠距離的Sub-1G無線傳輸;而LoRaWAN,因為涉及到協議,因此不是那麼廣為人知;本文,主要針對LoRaWAN協議進行一個總結,包括以下內容: LoRaWAN從哪裡來 LoRa

Redis從基礎操作到高階實用(公眾號蟒蛇帝國)

Redis資料庫 Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivot

還房貸最省錢的理財方法(公眾號——紫竹張先生)

今天是休息日,不談股票,今天談一下和房貸有關的事情。國慶節的時候我發了《中國的房價什麼時候會崩盤?》一文,在各位鐵粉的支援下成為了爆款文,閱讀量不僅突破了10W+,而且現在已經成為了30W+閱讀,非常感謝各位鐵粉的支援,於是我決定以後每週六都發表一些經濟類的民生文。關於是不是應該買房,什麼時候買房,我在上文中

國家在努力的幫你實現財務自由,你有什麼理由不幫國家(公眾號——紫竹張先生)

很多人的夢想都是實現財務自由,所謂的財務自由就是可以不用再上班了,不用為錢發愁,每天做自己喜歡的事情。關於財務自由的標準眾說紛紜,但是有一點是固定的,那就是財產性收入必須覆蓋掉你的日常生活開支。我們都知道,普通百姓的收入分為財產性收入和工資性收入,所謂財產性收入,就是你每天躺在家裡玩手機吃外賣也能獲得的收入,

鑽石營銷騙局和房地產的相似性(公眾號——紫竹張先生)

我們先來看看鑽石的歷史,鑽石在被發現之後一直是皇室和貴族炫耀的寶石之一,因為鑽石非常稀有,產地固定且產量極低,只能用作皇家特供,這個時候的鑽石,按照物以稀為貴的經濟學原理,其昂貴的價格是有支撐依據的。但是在十九世紀末期,南非神奇般的發現了一座巨大無比的鑽石礦,其儲量是全球原儲量的十倍之多,這些鑽石如果全部開採

R語言書籍的學習路線圖(格物堂)

【轉】http://bbs.pinggu.org/thread-1522238-1-1.html現在對R感興趣的人越來越多,很多人都想快速的掌握R語言,然而,由於目前大部分高校都沒有開設R語言課程,這就導致很多人不知道如何著手學習R語言。對於初學R語言的人,最常見的方式是:遇

小程式學習筆記(1)

微信的小程式已經推出了,相繼的教程也有。官方網頁推出API和介面說明,目前來講暫時足夠。 可以進入該連結檢視。微信官網 今天嘗試一下下載該web的開發工具,從目前來講,使用了一個下午。目前版本給人的感覺還有待繼續提升的恐懼。從編碼的體驗來講,對一個重度使用者

想做CRYP貿易找誰註冊?CTC區塊鏈套利是什麽?17052662311

app cryp貿易 CTC區塊鏈 區塊鏈 想做CRYP貿易 CTC區塊鏈套利找誰註冊?CRYP貿易 CTC區塊鏈套利是真的嗎?CRYP貿易 CTC區塊鏈套利是什麽?中國區CRYP貿易 CTC區塊鏈套利第一團隊領導人17052662311,CRYP貿易 CTC區塊鏈套利公司介紹CR

weixin://dl/business/?ticket=xxx跳內隨便頁面

document 求解 avi ace window intent ipad scrip nes weixin://dl/business/?ticket= 有沒有微信開發的或者熟悉安卓開發的朋友啊 <script> if(

ticket跳】手機瀏覽器網頁跳內置瀏覽器打開

blank turn 12c weixin net 瀏覽器 界面 一個 問題 【微信ticket跳轉】手機瀏覽器網頁跳轉到微信內置瀏覽器打開 起始不少人已經關註到了招行的智能客服:http://xyk.cmbchina.com/Latte/wx/20150520wkf?fr

JS實現讓其他瀏覽器自動瀏覽器打開鏈接

spa pre isa bis like cati 其他 obi navig //判斷是否是pc function is_pc() { var sUserAgent = navigator.userAgent.toLowerCase(); var

公眾號h5網頁被嵌入廣告 不知道什麽原因

正常的 嵌入廣告 數據 監視 https 公眾號 不知道 數據流 就會 這個是因為http劫持導致的。HTTP劫持是在使用者與其目的網絡服務所建立的專用數據通道中,監視特定數據信息,提示當滿足設定的條件時,就會在正常的數據流中插入精心設計的網絡數據報文,目的是讓用戶端程序解

小程序實現支付功能(可用)

arr 必須 enc red use sam func 結束 單表 原博: https://blog.csdn.net/fredrik/article/details/79697963 微信小程序實現微信支付功能 直接把裏面的參數替換成你的就

域名防紅跳系統 域名攔截監測系統的實現方式

網站 2個 需求 能夠 文檔 問題 get 分享 默認瀏覽器 我的微信網頁域名為什麽被封了 1、微信自動檢測到你在大量分享: 2、微信自動檢測到你在大量關註 3、微信自動檢測到你的訪問量異常 4、微信自動檢測到你的網站內容存在灰色等內容 5、用戶舉報。等等 有什麽防封措施呢

因為專業,所以值得信賴。如有需要,請加QQ99515681 或郵箱[email protected] codinghelp

laplacian arc con think aix scribe spa ike ref 代寫Elec4622/Elec9722作業、C/C++語言編程作業代做、代寫C/C++課程設計作業幫做、代寫C/C++實驗Elec4622/Elec9722 Laboratory