[心得] R 學習經驗分享

作者: Wush978 (拒看低質媒體)   2013-11-02 15:03:25
我個人學R 大約4 ~ 5 年了,R 嚴格來說是我碰過的第二個程式工具。
# 會R 之前
高中時期,我有段時間很喜歡玩mud ,
所以那時候,就用Zmud這個工具寫了一些機器人,會一點初步的迴圈,條件判斷。
大學念數學系,在大三時也玩過Mathematica。
但是整體來說,我沒有系統性的學過程式語言。
# 碩士班
由於碩班統計所的需要,我開始自學R 。
一開始我也不知道有什麼資源,就是開始看R 導論,先一路硬看到迴圈和條件控制,
看不懂就掃過去,沒花時間搞懂,但是專有名詞可能有個印象,
就直接開始寫作業了。
這時候會的就是:
- 賦值: <-
- 數值運算:+,-,*,/
- 布林運算: &,|,!
- 流程控制: for, if, while
就這樣,很多統計上要用的演算法,我可以用上面的東西硬算出來了。
畫圖就只會畫x-y plot,因為這就是中學學過的座標系統,對我來說很熟悉。
但是我毫無資料結構的概念,所以說就一直不懂下面的程式碼為什麼不能跑:
```r console
> X <- cbind(x = 1:10, y = 2 * (1:10) + rnorm(10))
> lm(y ~ x, X)
Error in model.frame.default(formula = y ~ x, data = X, drop.unused.levels =
TRUE) :
'data' must be a data.frame, not a matrix or an array
```
碩班的過程,我對R 的功能也越來越熟悉,但是我仍然一直沒有充份的理解:
- data.frame是什麼?
- 為什麼R 的迴圈這麼慢?
這些東西問別人也只能得到簡略的答案,因為背景知識太少,所以就是不懂。
研究時期,我也用R 上面的基本數值運算功能,硬寫出如MCMC之類的演算法,
但是跑的非常慢,所以那時候我滿腦子都是想要把模擬加速的想法。
網路上雖然有許多資源,但是因為我資工底子幾乎是0 ,所以也看不懂。
# 碩士畢
畢業後,我想知道更多R 相關的知識,想要寫出跑更快的模擬,還有一些其他的想法,
我就跑到中研院資訊所做助理。
途中,我自學了一些Rmpi、C 、Rcpp以及製作套件的方法。也發現「國網中心的R 筆記」
因為聽說R 和Linux 比較搭配,所以我工作開始只用Linux 系統。
一年後,我想要把程式寫的更好,所以就跑到內湖一間小公司待了一年練程式,
那時候呼嚕嚕的把php, C++ 看的更精,對一些基本程式語言的功能也有更深入的理解。
學習資源也變得很硬了:
- C++ Primer
- php 官方網站
我還把Soft_Job版或是其他網路上看到的,其他人推薦的程式的書買下來啃。
一本書通常不會看太久,通常程式碼我也不細看,就只是記得它能夠解決什麼問題,
之後遇到了再回頭翻。
我也發現,學一個語言最正統的方式就拭去他的官方網站,找他的Documentation。
隨著C / C++ 的知識的進步,我也開始看php,R 這類scripting language的原始碼。
所以現在我大概知道,為什麼R 的迴圈這麼慢了,
以及從更底層的觀點看R 的資料結構到底是什麼。
學習程式也不再是只停留在語法的階段,而是學習程式語言的特性。
重點也已經從學R ,變成用R 做好各種應用。
也由於對這個程式語言的愛好,所以和學弟創辦Taiwan R User Group,繼續前進!
# 總結
回頭看,走這條路就是要不斷的學習,因為東西真的是太多了,永遠學不完。
碩士班學基礎,畢業後則是要靠自己自學。
這些基礎中,最根本的就是中學以及大學的數學,以及邏輯。
我算是很幸運,高中就已經知道怎麼寫指令式程式語言,所以一開始學R 就只是學語法。
但是因為沒有其他資工相關的背景知識,所以一開始也只能學到這樣。
數值運算上,從簡單的四則運算,到微積分、線性代數、機率和統計都是基礎知識。
學R 上,我是從以下入門:
- [R 導論](http://www.biosino.org/pages/newhtm/r/tchtml/)
- [R 學習筆記](http://statlab.nchc.org.tw/rnotes/)
我想現在有許多更好的入門管道了,例如Coursera的課程。
之後去補充各種資工背景知識,更深入的理解電腦,這部份很雜,所以我列一些重要的:
- [C++ Primer]
- 資料結構和演算法的教科書
現在應該也有更好的資源了。
事後覺得,如果那時候有Coursera,我應該可以學更快了也說不定。
然後從官方的文件、範例及原始碼來學習了。
如:
- [R FAQ](http://cran.r-project.org/doc/FAQ/R-FAQ.html)
- [R for Windows FAQ](http://cran.r-project.org/bin/windows/base/rw-FAQ.html)
- [Writing R Extensions](http://cran.r-project.org/doc/manuals/R-exts.html)
寫Rcpp的話,常看的就是`/usr/share/R/include`底下的各種`.h`檔案,
想要理解R 底層的知識除了[Writing R Extensions]之外,還要搭配
`/usr/share/R/include/Rinternals.h`
最後就會發現,學習永遠學不完了... XD
作者: celestialgod (天)   2012-01-02 15:08:00
版主很認真 推!!
作者: wertymin24 (werty)   2012-01-02 16:51:00
推~優良板主~碩班時從你的文章學了不少
作者: allen1985 (我要低調 拯救形象)   2012-01-02 21:17:00
感嘆自己用了五六年R 還是只會 for if...推版主!!!
作者: skylikewater (choc.)   2012-01-03 00:37:00
推!
作者: jjmr (worldwide)   2012-01-03 00:44:00
push!!
作者: bmka (偶素米蟲)   2012-01-03 08:46:00
推板主
作者: ccwang002 (亮)   2012-01-03 14:34:00
推版主~
作者: shirley587 ('')   2012-01-03 19:09:00
推一個 用心
作者: gcanny (工人智慧)   2012-01-03 22:35:00
推版主用心..
作者: wisdom8002 (Blood、Sweat、Tears。)   2012-01-04 21:28:00
推用心!
作者: umii (umii)   2012-01-20 22:39:00
推,好清楚
作者: adgjlsfhk123 (adgjlsfhk123)   2012-01-27 19:37:00
推!

Links booklink

Contact Us: admin [ a t ] ucptt.com