如何零基础学习 R 语言?

本人金融学研一在读,本科经济学,本科学校开的编程课没好好学,相当于编程完全零基础。现在软件除了会用stata做比较简单的回归,其他啥都不会。但是发现学…
关注者
685
被浏览
182,735

34 个回答

更详细内容请移步

该如何学习 R 语言? - Evan 的回答

-----------------我是分割线---------------------

我当初学习R的时候在网上搜到一则流传很广的R语言学习路线图(

R语言学习由浅入深路线图

),我在微信圈,微信公众平台上也见多次,写的确实很详细。但是对一些没有编程经验的童鞋来说,学习的难度还是太大了。后来自己浏览了很多R语言书籍,尝试了一些门槛比较低的书籍。自此,R语言学习才走上正轨。以下涉及内容包括R语言书籍的推荐,以及R语言相关课程的推荐,学完这个教程的内容之后足以应付工作学习中遇到的统计分析的问题了。

R语言有两类书籍比较“坑”,一类是Programming类,一般都带programing字眼,但不绝对。这类书籍一般是计算机背景的人写的,关注的重点是编程(鞋代码和编程不是一码事),底层的运行机制之类的,比较难以捉摸,典型的例子是《The art of R programming》。还有一类是讲统计知识比较多,而且喜欢推公式。虽然有所裨益,但是会分散很多学习R的精力,可以作为后期提高的书籍,但是作为入门不太合适,像《The R book》。

讲完了“不好的”R的学习资料,可以规避一些“误入歧途”的风险。下面介绍一下我觉得比价有用的学习资料。学习任何语言的捷径就是Learn by dirty。这里推荐一个网站,code school的Try R 课程,非常基础,从最基本的语句的赋值到最后的数据框的基本操作,手把手一步一步的教你,然后对你输入的语句,网页会给出判断,如果写错了,还有很详细的解释。网页全部是英文的,英语过了四级的童鞋应该可以应付了。

R的入门书籍,比较好的是Learning R , 中文名是《学习 R》。第一章到第五章的数据的基本入门,必须要细看的,而且要读好几遍的,这是R的最基本的东西,需熟练掌握,多家练习。别觉得看懂就行了,只有自己敲出来运行正确才行。第六章环境和函数这一章建议直接跳过,比较抽象,等回头R学的差不多了,再回头看比较好。大多数人,平时基本不涉及到这一样的内容。第七章 字符串和因子也是很重要的一章,特别是医学领域。第八、九章的循环,量力而行。第八章的内容其实大多数其他编程语言都会涉及。但是在R里面,这些显循环,用的较少。其实主要还是向量化的操作为主,也称隐循环。第九章的隐循环非常有用,是R最精华的东西,就是学习起来有点困难。其主要内容是 apply族函数,包括lapply, sapply, tapply, apply, mapply等。这本书最优秀的地方在于数据的subset部分,各种方法讲的非常详细,也有很多的例子。这也是R语言比较难入门的地方。


《R in Action》 确实一本非常优秀的书籍,我看喝多大神都推荐这么书,我大概学了一遍,确实非常不错。这本书非常好的地方在于围绕具体的问题展开,教你如何利用R进行操作,而且选取的例子也非常具有代表性,所以建议每个例子都要详细研究。但是这本书学习曲线比较陡峭,可能上一章的内容还没有消化,又要开始新的内容了。遇到问题时建议多点耐心,谷歌或者请教别人,把这些知识点掌握了,这是R的基础。


还有一本书,R cookbook,这本书是围绕具体的问题进行设置的。所以可以作为一个遇到困难时候的快速翻阅手册。里面特别有用的章节是如何运用apply组函数,上面两本书都讲得不是很详细。

 R绘制统计图的功能非常强悍,先上图:

1. 著名的霍乱发病地图


2. 回归曲线及其置信区间

3. 这个。。。亮点自己找

你见过的没见过,想到的,没想到的,都可以绘制出来哦。哈哈,心动不如行动,几行代码一敲,令人心神荡漾的图片就出来啦。

R绘图非常简单的,就是一个简单的学习记忆的过程。R语言绘图发展的非常快现在有三大绘图系统,基础绘图系统,Lattice绘图系统,ggplot2绘图系统。虽然各有其使用价值,但个人推荐ggplot2绘图系统以及基础绘图系统。 Lattice对于多分组的数据的展现比较好,但是ggplot2是可以很大程度上替代其功能,不学习也可以,非要用的时候依葫芦画瓢就可以了。下面主要介绍R的基础绘图系统和ggplot2绘图系统的学习路线。

R基础绘图系统 《R in Action》中,花了很大的篇幅介绍了基础绘图系统,如果学习完了,工作中碰到的很多统计图就可以胜任了。如果你喜欢钻研,可以看看谢益辉(Knitr包的作者)的《现代统计图形》,讲的非常详细和透彻。不仅如此,更是讲解了图形的选择,图形的设计方面的知识。学有余力,不妨学习一下。

ggplot2绘图系统 虽然ggplot2的作者写了一本书《ggplot2. Elegant Graphics for Data Analysis》,但是理解起来比较困难,而且我们更关心的是如何绘制我们所需要的图形。所以,我比较推荐他同事编写的书《R graphics cookbook》一书。书中不仅有ggplot2的绘图代码而且还将其与基础绘图系统进行了比较。介绍的图形非常实用,而且ggplot2的扩展性非常强,可以发挥你的想象力,创造一些新奇的图形。

强烈推荐Swirl包,你值得拥有!

安装并认识RStudio

打开RStudio,用Ctrl+Shift+N新建文件,得到如下窗口:

如果你安装出来的界面排版跟我不一样,请参考英文自己对上号,也可以在“Tools→Global Options→Pane Layout”里设置成和我一样的。

各区的功能大概是: 编辑区 是我们的战略指挥中心,在这里输入命令; 工作区 是军械库,可以看到我们都有哪些武器装备(包括数据库、在编辑区输入命令后生成的各种变量等); 控制台 则一来是后方监控,我们哪条命令运行成功,哪条失败,出了什么问题,都可以在这里看到,二来,运算结果也在这里显示; 展示区 ,其实这个区功能比较杂,但我们暂时只用到展示统计图的Plots选项卡,所以就先这么称呼吧。

下面用一个栗子来大致描述一下怎么简单处理数据:

Ready:导入数据,向量赋值

我伪造一组数据来演示,假设我们有一个对照组和两种药物的治疗组,检测组织切片的显微镜下A细胞计数,这个数据在Excel里是这样的:

第一排是组名,全英文,不要有空格,底下是数据。

在RStudio的工作区有个Import Dataset,点击之后选择From Excel,然后可能会提示你安装一个导入数据的工具包,选Yes,然后等它自动安装。装好后,在接下来的弹窗里,点Browse导入你的Excel文件,然后你有可能发现你的数据都变成了什么鬼……此时,需要把每一列下的double下拉框点开,全都改成Numeric。确保下面的First Row as Names选上,其他的随意啦~

细心的小伙伴可能发现,左下角Name里的Cell_Count,比原文件名Cell Count多了一个下划线。这是系统自动改的,为了符合R语言的语法。像TNF-a这样含有分隔符的,也会变成下划线。如果不涉及这些特殊符号,一般不会有变化,但还是要留一下,因为一会儿要用到Name里的名字,而不是Excel的文件名。

这时候你看到工作区多了个数据表的选项卡,工作区也补给了弹药,Data。

现在要把弹药装填上膛:把每组数据变成向量,并赋值成为变量。可以理解成给每组数据穿上R语言能识别的外衣(向量),然后起个名字(变量)。

在编辑区输入简单的三行代码,格式:随便起一个名称=c(刚才导入Excel时出现的那个Name$数据表中相应的组名),注意各种符号都要用英文半角状态。“c(blabla)”这串就是向量,前面起的那个名称就是变量。每输完一行都用Ctrl+Enter运行一下。

最后看到工作区多了个Values,其中的num表示这组向量的类型是数值,[1:16]表示这是第1~第16个数值。

要是现在就觉得输代码太麻烦了,不要怕,其实你输入前半个括号时,后半个就自动给你补齐了,不会出错的;而且输入前几个字母的时候会有弹窗提示,直接选中按Enter就好了:

一切准备就绪。

Go:简单的运算、作图

一、先做个描述性统计吧

代码:summary(Cell_Count),其中summary是函数名,也就是我们要做的事情,括号里的是对象,所以这行代码的意思就是,我们要对Cell_Count这个数据集做个Summary描述性统计。这就是R语言的基本格式了,其他更复杂的几乎都是在此基础上变化。

Ctrl+Enter运行之后,就可以在控制台上看到运算结果:

给出了各组的最大值、最小值、中位数、四分位距、平均值。

同理,可以用bartlett.test(Cell_Count)做方差齐性检验,用shapiro.test(Control)来检验其中Control组的正态性,这里就不展示结果了。

一个括号里还可以放两个变量,比如常用的T检验,要比较两组之间的差异,就把这两组都放到括号中,用逗号把它们隔开,输入t.test(Control,Drug_1)并运行,就会得到:

终于看到了我们心心念念的p值~当然还有95%CI、各组平均值等等。

这样,我们可以做很多类似的简单运算,比如计算对数:log(),标准差:sd()等等。再说,其实这时候我们已经可以理解不少网络上搜到的代码了,不会就搜之——R语言有个公认的好处就是,它有很多用户,你只要入门,理解代码,就很容易在网上找到帮助。

二、作图

终于要画图了~拿到一组数据,我想先看看它的分散情况,通常会使用箱形图。RStudio也可以轻松完成。

上代码:boxplot(Cell_Count),运行,左下角的plot选项卡里就出现了一幅箱形图:

但是有没有觉得少了点什么……横坐标、纵坐标去哪了?

所以就要对代码进行加工,变成这样:boxplot(Cell_Count,names =c(‘Control’,‘Drug 1’,‘Drug 2’),xlab=‘Treatment’,ylab=‘Cell Count / HPF’),于是得到这个图:

注意到了吗?下划线都没有了!是因为代码中做了限定,names =c(‘Control’,‘Drug 1’,‘Drug 2’),和ylab=‘Cell Count / HPF’,每个词组都加了单引号,引号内是字符串,不参与运算,所以几乎不受符号的影响。

图的上方有个Export,从这里可以导出图片,可以根据杂志的要求保存成各种格式,还可以调整尺寸(其实导出之前拖动窗口大小也可以调整尺寸):


OK,都讲到代码的加工升级了,就不再展开了,RStudio的功能的强大应该已经有多体会了,接下来你可以从网上搜些代码来对自己的数据探索,Quick-R( statmethods.net/

另外,你可能会听说过R语言的各种包,本来只想做一种运算,可能会有人跟你说,可以用XX包里的OO函数,还可以用OO包里的XX函数,还可以用……最后就再引出几个好用的包供大家探索吧

一、数据可视化 ggplot2 ggplot2是最常用、最受用户们喜爱的作图工具包了,被誉为数据作图的标杆。它做出的图不仅漂亮,而且可以涵盖很多复杂的信息。网上也有大量关于它的教程,学习资源很丰富。

gridExtra ggplot2的一个缺点就是不能像自带的graphics基础包那样,把几张图拼成一组图。而gridExtra就可以解决这个问题,把ggplot2做出来的漂亮的图组织到一张大图里。

lattice lattice经常被拿来和ggplot2相提并论,这两者也是选择困难户的纠结点。ggplot2做出来的图更漂亮,但它入门难啊~lattice则适合入门选手,作图速度较快,还能进行三维绘图,这是ggplot2不具备的。

二、统计分析 lme4 (或者nlme) 如果你常做一些复杂的数据,实验分了好几个层,有好多亚组,亚组下面还有亚亚组,比如要做好几种细胞,检测好几个指标,每个指标还有不同的观察时间点……此时lme4包就可以比较轻松地把这些数据组织起来。nlme也一样,选一个就好。

forecast 比较适合分析时间序列数据。

zoo forecast里有很多好用的内置函数,但有时候还需要更简单易用的计算移动平均、移动标准差的函数,这时zoo会是个很好的补充。

spatstat 空间分析神器,比如某种疾病发病率在地理空间上的分布特征等等。

三、数据整理 dplyr dplyr可以很好地把数据随意分解、整合。这个包可能也比较难上手,但熟悉之后,就像老司机开车一样形成本能。

四、生物信息学 Bioconductor 对于做基因组或芯片分析、阵列、基因流等等的小伙伴,Bioconductor是个好选择。它还有个很活跃的用户社区,可获得及时反馈,每年更新2次,还有丰富的学习资源,比如 bioconductor.org/help/c 这里的一系列教程。

五、展示 knitr 虽然一开始说到的数据可示化也是展示的一种,但这里要说的是,通过更丰富的方式来展示其他多种内容。除了数据分析成果,还有分析过程中各种代码、运行过程、文本说明等,都可以通过knitr生成网页、PDF、幻灯片等形式展示出来。比较适用于教学、报告等场合。

shiny shiny包也像knitr一样可以做出漂高的网页,此外还可以快速搭建动态的交互网页App。它一大优势就是不需要学习其他网页编程语言(CSS、JS等),纯靠R。

stringr 字符串处理神器。可在作图、网页编辑、数据清洗等操作中起到很好的辅助作用,对字符串进行拼接、匹配、变换等。