99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀如何高效地學(xué)好 R?
如何高效地學(xué)好 R?
2016-07-18
收藏

R在統(tǒng)計(jì)和數(shù)據(jù)分析領(lǐng)域占據(jù)著越來越重要的作用,那么如何著手學(xué)習(xí)R呢?

學(xué)R主要在于5點(diǎn)三階段:


第一階段有一點(diǎn):基礎(chǔ)的文件操作(read.*,write.*)、數(shù)據(jù)結(jié)構(gòu)知識,認(rèn)識什么是數(shù)據(jù)框(data.frame)、列表(list)、矩陣(matrix)、向量(vector),如何提取(包括which, []等)、置換(t, matrix等)、刪除(-, which等)、運(yùn)算(+, -, *, / , %%, %/%等)、轉(zhuǎn)換(as.*)、修改(edit, fix等)數(shù)據(jù)(包括單個(gè)數(shù)、行、列、表、變量),安裝包、調(diào)用包以及session的保存。完成這一階段,你就大致能像excel里處理數(shù)據(jù)一樣了。

第二階段有三點(diǎn):

1、學(xué)習(xí)統(tǒng)計(jì)。這是貫穿整個(gè)R學(xué)習(xí)的最重要的一部,很多時(shí)候你并不是不知道在哪里找,怎么使用某個(gè)函數(shù)的參數(shù),更多的時(shí)候你是不知道某個(gè)統(tǒng)計(jì)方法的原理,所代表的意義甚至不知道該用什么方法。所以學(xué)習(xí)統(tǒng)計(jì)學(xué)知識往往才是學(xué)習(xí)R的關(guān)鍵,之后找函數(shù)、怎么用其實(shí)都是傻瓜式的,并不需要你從頭編寫算法。這部分內(nèi)容頁要結(jié)合每個(gè)人要做的事做

2、批量處理。由于R和matlab一樣,注重的是批量處理,而且R之中的循環(huán)往往效率極低,所以在R之中如果你發(fā)現(xiàn)你要使用雙層循環(huán)的時(shí)候,就要想想了,有沒有批量處理的方法。

a、首先,幾乎所有的R里的運(yùn)算符和自帶的函數(shù)都是可以批量處理的。比如向量a+向量b是指每個(gè)元素按照index相加,所以就沒必要for一下了;

b、其次,R自帶有的apply族函數(shù)(因?yàn)槭且幌盗幸詀pply結(jié)尾的函數(shù),所以稱為apply族),split,以及aggregate函數(shù)。這三類就是R自帶的批量處理的利器,學(xué)好這三類函數(shù),基本就可以完成絕大部分的數(shù)據(jù)批量處理了。

c、然后就是reshape2包以及plyr包了,這是批量處理的兩個(gè)利器,reshape主要是整形,plyr包基本提供了一套整理數(shù)據(jù)的理念,學(xué)好這兩個(gè)包,批量處理將事半功倍。

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

3、繪圖系統(tǒng)。總結(jié)而言,我們可以把R的繪圖系統(tǒng)分成四個(gè):Graphics, lattice,ggplot2以及grid。最好學(xué)習(xí)順序也是按照這個(gè)來。

a、自帶的繪圖系統(tǒng)。這套系統(tǒng)可以完成最基本的事情,其操作也類似于matlab,可以看做是分步驟命令參數(shù)式繪圖,基本就是將一系列作圖看做一步步的命令,每一句都干一件事,然后通過參數(shù)調(diào)整其中的某個(gè)元素的大小、位置、顏色。

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

c、ggplot2.這是經(jīng)典的R繪圖包,繪圖哲學(xué)是圖層式的,理解成一個(gè)一個(gè)圖層的覆蓋。這個(gè)繪圖系統(tǒng)能做很多事,而且其自帶主題也相當(dāng)漂亮。有一定的學(xué)習(xí)難度。以下就是我用ggplot畫的圖



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

如果你完成了以上兩個(gè)階段,你已經(jīng)可以在工作學(xué)習(xí)中完成絕大部分的工作。但如果你是知識的創(chuàng)造者,或者是個(gè)程序員,或者是要實(shí)踐自己的算法、理論、統(tǒng)計(jì)方法、繪圖方法,或者亦或是你只是腦抽了,那就要進(jìn)入第三階段的學(xué)習(xí)。這部分包括,C語言掌握與精通、R語言調(diào)試、改進(jìn)、編寫包、寫一個(gè)地道的幫助文檔、推銷自己的想法。這一階段完成了,你也就是一個(gè)R語言的大牛了。少年到處是你可以施展拳腳的地方。

由以上內(nèi)容,可以基本上把學(xué)習(xí)路徑總結(jié)為下圖:


最后是學(xué)習(xí)資源的問題,總結(jié)如下

1、課程類。 @uhuruqingcheng已經(jīng)介紹的coursera上的課程的確很適合入門。

2、書籍類。建議入門用R語言實(shí)戰(zhàn) (豆瓣),然后想要快速指南式的了解R語言的統(tǒng)計(jì)應(yīng)用也可以看復(fù)雜數(shù)據(jù)統(tǒng)計(jì)方法 (豆瓣) 。統(tǒng)計(jì)學(xué)的內(nèi)容按照自己的需要自行補(bǔ)充,在這里就補(bǔ)推薦了,推薦了也是和R沒啥關(guān)系的。繪圖系統(tǒng)推薦兩本書就夠用了:ggplot2 (豆瓣) 和 R Graphics Cookbook (豆瓣)這兩本也都有中文版可以買到。如果這部分都已經(jīng)學(xué)得不錯(cuò)了,其實(shí)你就不需要書了,直接看R的幫助文檔吧,help()或者? XXX 都可以。在此建議用RStudio,可以幫助你很快的查看幫助,編寫script、斷點(diǎn)調(diào)試等等。

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

3、網(wǎng)站類。

一個(gè)是博客,以上已有推薦。

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

三是R的journal。題主可以自行在google里搜索 R journal 第一個(gè)就是。

四是包和函數(shù)的搜索網(wǎng)站Search all R packages and function manuals 。 這個(gè)網(wǎng)站提供R里所有包和函數(shù)的搜索系統(tǒng)。其貼心之處還有(1)提供分類功能;(2)提供下載的排名,每個(gè)包的下載時(shí)間線。

此外,其實(shí)R語言是一門輕編程重統(tǒng)計(jì)的語言,所以題主完全不需要擔(dān)心自己的編程基礎(chǔ)。直接做幾個(gè)小項(xiàng)目,你會(huì)很快上手,千萬不要從教材第一頁讀到最后一頁,那種效率極低,且容易半途而廢。

=======================

2015.2.1更新:關(guān)于批處理的解答

有幾位同僚在回復(fù)里面詢問批處理的問題,這里做個(gè)簡單的解釋。

批處理類似于向量運(yùn)算,但也有很大差距,簡單的說,是一個(gè)函數(shù)可以快速的套用到多維變量的每一維值中。

1. 自帶函數(shù)的批處理

譬如:

這就是一個(gè)最簡單的批處理的例子,結(jié)果是

這是一個(gè)簡單的向量標(biāo)量積結(jié)果,而所謂的批處理也就是類似于這種處理方式。而在R之中,數(shù)據(jù)的最小單元其實(shí)就是向量,因此,幾乎所有R的函數(shù),都是批處理的。(注意,與matlab不同,matlab最小單元是矩陣,因此,其基本的運(yùn)算都是基于舉證運(yùn)算的)。我們可以用以下方式定義批處理函數(shù):如果一個(gè)函數(shù)F,滿足,

且函數(shù)F的實(shí)現(xiàn)不基于任何顯式循環(huán)(諸如for,while, until),則函數(shù)F可以稱之為批處理函數(shù)。

譬如:plot(將兩個(gè)向量的對應(yīng)的數(shù)逐個(gè)地畫到圖中),paste(將字符串向量的每個(gè)字符串都做連接)等等。。。

這里比較一下會(huì)更加清楚,譬如如果在python里實(shí)現(xiàn)以上功能(不實(shí)用pandasnumpy包),就得采用顯式的循環(huán)(for,while等):

因此,我們可以看出采用批處理最大的優(yōu)點(diǎn)在于減少的代碼量,并且更加簡潔明了,易于維護(hù)。

2. 批處理是否更加高效

其實(shí)批處理的另一個(gè)好處就是使得運(yùn)行更加高效,因?yàn)榕幚砗瘮?shù)往往經(jīng)過處理(使用更好的算法或者更底層的實(shí)現(xiàn)方式)得到某種程度的提速。我們在這里測試實(shí)現(xiàn)將向量每個(gè)元素都自乘2這一功能,分別采用按鍵替換,按數(shù)字索引替換以及直接批量處理的方式,來測試不同方式速度是如何的。

結(jié)果如下:

明顯看出,批處理并且避免顯式循環(huán)的方式的確有助于提高速度,代碼量也少的多。因此,何樂而不為呢?

但是經(jīng)過測試,并不是每個(gè)批處理函數(shù)的效果并不是都是那么明顯,譬如:strsplit。甚至研究碼源之后,你也會(huì)發(fā)現(xiàn),很多批處理常用的函數(shù)的實(shí)現(xiàn)其實(shí)都是for,因此,有一派觀點(diǎn)認(rèn)為避免顯式循環(huán)(特別是指采用apply函數(shù)、plyr包的方法避免顯式循環(huán)),其實(shí)具有一定的誤導(dǎo)性,其是否能提高效率也是要視情況而定。

3. apply族函數(shù)和aggregate函數(shù)

這是R基礎(chǔ)包自帶的兩類用于批量處理的函數(shù)包,在此,只做簡單地介紹:

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

aggregate這個(gè)函數(shù)比較有意思,常用的帶入方式是:

作用就是基于by指定的變量做分組,計(jì)算FUN分別統(tǒng)計(jì)每個(gè)組的結(jié)果。

4. 幾個(gè)常用的批處理用的包

主要有:

●reshape(最好用的是melt)
●plyr(__ply族函數(shù)是最好用的,有一個(gè)很巧妙地邏輯,對于開發(fā)軟件包的人來說學(xué)習(xí)這個(gè)包很有啟發(fā)性;其次用ts比較多的人最好學(xué)一下round_any函數(shù)):此包入門有點(diǎn)難,有些人也吐槽效率;round_any+gglot2畫時(shí)間序列實(shí)在是太佳了。
●data.table:這是一個(gè)網(wǎng)友的推薦,聽說很好用,效率也提高不少。

5. 關(guān)于如何用別的語言混編和apply族函數(shù)的效率還可以看這個(gè)博文,寫得不錯(cuò):

謝益輝: 也談提高R語言的運(yùn)算效率(http://cos.name/2009/12/improve-r-computation-efficiency/)

本文由知乎著名答主黃寶臣原創(chuàng),CDA數(shù)據(jù)分析師已獲得授權(quán)

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }