如何系統地學習 R 語言的各種 packages?
目前正在用R做畢設程序,感覺很多包都不熟悉而且幫助文件非常不好懂。
有什麼系統的辦法可以學習這些packages嘛?比如說zoo,quantmod,Rmatrix這些常用的包,除了幫助文件是否有書籍對此進行系統的講解呢?而且R有幾千個packages,如何系統的學習自己需要的呢?
對於R語言的真正使用者來說,R最大的問題不是慢,而是程序包的雜亂,嫌它慢的一開始就不會用R。我認為這個問題可以分為兩部分,一個是如何選擇自己需要的包,一個是如何學習這些包。
我把程序包分為三類,第一種是功能增強型,比如zoo和ggplot2,他們的功能原本可以用繁瑣的代碼實現,但是使用這些包可以實現的更快或者更好;第二種是統計建模型,專門為某個統計領域或模型而做的包,小到wavelet這種專門做小波分解的包,大到TSA這種所有經濟類專業都用的時間序列包都屬於這一類。第三種是特定功能型,這種包一般非常小眾,比如分解和製造音頻的tuneR(可以用它來聽股票價格的白雜訊哦),再比如我自己寫的用於dota2選人的RDota(R版本更新以後已經不能用了暫時懶得更新),這種包一定是要麼很專業要麼很娛樂,不太需要學習「R」,而是這個功能本身,這一類都不屬於下面討論的範疇。
如何選擇自己需要的程序包?
對於功能增強型包,我認為值得系統學習的只有ggplot2,其他的包應該是什麼時候用到,或者什麼時候見到,就什麼時候學。比如你需要處理時間序列了就會用到zoo,或者你上網課看到了什麼特定的功能很不錯,就留個印象,什麼時候需要了再回去翻。再比如你工作的時候覺得R慢,想知道怎麼提高R的效率,去谷歌一下"how to improve computing performance in R",就會搜到CRAN官方給出的一片文章CRAN Task View: High-Performance and Parallel Computing with R
所以,見到什麼就記,需要什麼就搜就可以了,如果你按照R包下載量前10的包一個一個學,你可能其中90%的功能都用不到(沒錯就是90%,因為每個包里都有很多犄角旮旯你用不到的功能)。ggplot2實在是太強大了,用熟悉以後哪怕是在matlab里寫的程序我也把數據調到R里畫圖,然而這個包很複雜,從幫助文件里你很難快速上手,因此需要系統學習。對於統計建模型的包,肯定是你聽說過哪個模型才會用哪個包呀,這個就不用我多說了吧。需要注意的是,有些模型在好幾個包里都有,比如garch,請務必用兩個包都跑一下看看結果一不一樣,如果不一樣請老老實實用stata或者matlab去做。這是因為即使是下載量TOP10的包,也大多是個人所製作的,比如TSA,這些包里有bug!有bug!有bug!比如我去年用TSA的時候就發現了兩個bug,都在底層的函數里不在最外層,一般用戶看到error肯定一臉懵逼。我甚至把改好的函數文件發給了maintainer,maintainer表示感謝並且沒有更新這個包╭(╯^╰)╮
第二個問題,如何學習R程序包。
在回答這個問題之前,首先你需要對R的基本功能有了解,否則連就無從說起學包。學習R的基本功能最快餐的方法是上JHU那門著名網課r programming,這門課後面的幾門課也會學到很多有用的包。
對於ggplot2,我強烈推薦買本書學,因為我學R的時候R還非常冷門網上資料太少,不過現在可能網上資源也多了吧。我用的書叫《R數據可視化手冊》,真心好用。
對於有些大包,他們是有官方網站的,上面有足夠詳細的教程,比如題主提到的quantmod,quantmod: Quantitative Financial Modelling Framework官網上有很多的example,按照example學。再比如機器學習包caret,上面的教程也足夠詳細The caret Package(不過對於小白,機器學習還是應該從e1071包學起)。
對於流行的包,比如題主說道的zoo,你用百度都可以找到一大堆中文教程,跟著中文教程學就好了,主流功能都能學到。
下面說一下不是那麼好找資料的包怎麼學:
第一,看pdf版manual:我們在提交一個R包讓CRAN審核的時候,package裡面是有一個pdf文件的。這個文件如果開發者懶,是由開發者為每個函數寫的description自動拼在一起的。但是如果開發者不懶,他會自己寫這個pdf文件,讓這個文件更親民一點。如果你要學習的包有這種文件,這裡以程序包sandwich為例,在RStudio右下角的窗口找到你要學的包,點一下會看到這樣一個界面:這當中的user guides, package vignettes and other documentation裡面就會有開發者手動寫的文件。跟著學就可以了。第二,如果沒有,那麼最簡單最快速的方法是快速找到主要函數,複製example部分的代碼運行,查看結果,再根據example代碼修改成自己需要的代碼。什麼是主要函數?比如randomForest這個包是做隨機森林模型的,那麼主要函數肯定就是那個叫randomForest的函數嘛!你不用擔心example的運行問題,在CRAN審核的時候要求example代碼需要在空白的環境下正常運行才可以,所以example一定是最標準的。當然了,這已經是最後的辦法了,針對的是不那麼流行,比較專業的小程序包。對於初學者大部分問題都可以通過上面的方法解決。
感謝閱讀~推薦閱讀:
※如何讓R語言寫出來的程序生成一個獨立的可執行文件?
※python 可不可以像R那樣保存內存中的變數?
※當下對於量化投資有用的R語言包有哪些?
※Python 在數據分析工作中的地位與 R 語言、SAS、SPSS 比較如何?
※時間序列建模問題,如何準確的建立時間序列模型?