[心得] 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