专栏名称: 癌图腾
癌图腾(cancer totem)是一个关于细胞与微环境的学术观点交流平台。
目录
相关文章推荐
丁香园  ·  饮用水 100% ... ·  3 天前  
丁香园  ·  院士任院长!这所知名医学院成立新学院 ·  4 天前  
51好读  ›  专栏  ›  癌图腾

你真的会用R的帮助吗?

癌图腾  · 公众号  · 医学  · 2017-07-19 11:30

正文


很多R语言初学者都抱怨过R的帮助文档,有说文档复杂的,有说难懂的,也有说包里面没文档的。其实,真正说起来,R的帮助文档才是这世界上学习最好的教材,对比Python的help文档,R的文档可以让我们感动到流泪。


1. R的文档和帮助有多少?  


R语言的书都会教你,如果要查某个函数的帮助,比如glm函数,可以用?glm??glm,或者help("glm")的方式来查看帮助文档。

但是,这样查出的帮助文档只是R文档的一部分。来,陈老师带你来认识下R文档和帮助资源的版图:

接下来陈老师会逐一向大家介绍上面每一块的内容


2. 与R同行的文档

与R同行的文档,也就是你安装R和R包的时候,同时安装到电脑里的文档,也就是上图左半边的内置文档、内置Demo和小品文。

先看看内置文档,它又分成三部分:R核心小组的文档、名门R包的文档以及其他R包的文档。

R核心小组的文档

R核心小组,是个类似五老星一样的神秘组织,掌管着R前进的方向,掌管着R包是否能在CRAN上架。

CRAN又是什么呢?CRAN是Comprehensive R Archive Network(R综合典藏网)的缩写。它除了收藏了R的执行档下载版、源代码和说明文件,也收录了各种用户撰写的软件包。现时,全球有超过一百个CRAN镜像站。

下面这个视频介绍了CRAN


需要注意一点:不是所有的R包都在CRAN上,有的R包在Github上,有的在R-forge上。

既然R核心小组掌握着R和R包的生杀大权,必然会发布文档来规范所有人的行为。

打开RGui,在菜单中的帮助中,可以看到R自带的有这些文档

  • An Introduction to R :  R入门手册

  • R Reference : 函数速查参考手册

  • R Data Import/Export : 数据导入/导出R的手册,各种数据格式,各种数据库

  • R Language Definition : R语言定义,太过底层,慎入

  • Writing R Extensions :  关于创建R包、与其他语言交互以及调试R代码,高级忍术,小白慎入

  • R Internals :  非常底层,慎入

  • R Installation and Administration: R的安装和管理

  • Sweave User : 有了knitr,这个Sweave文档可以抛弃

 上面这几个文档都是R核心小组提供的,除了我标明慎入和抛弃的以外,都是不错的参考手册。如果未来你功力提高了,想成为写R包的高级开发者,就要阅读那些小白慎入的文档了。不过这样的人,毕竟还是少数,也没有几个人有这个必要修行如此艰深的忍术。

除了关于R本身的文档,R核心小组还提供了基础R包的文档。

什么是基础R包呢?就是安装R以后,默认就有的那几个R包,就是下面这些:

这些包是R核心小组钦点的包,可谓是R包中的贵族。

R虽然是开源的,但是有R基金会,以及一些商业公司的赞助,R核心小组负责R本身的开发和更新维护,其中也包括上图所示的基础包。所以基础包的质量是很高的,文档质量也很高,大家可以放心取用。

名门R包的文档

名门R包指的是那些出身名家之手的R包,比如Hadley Wickham和谢益辉,他俩正好都是RStudio公司的,写出了非常受欢迎的包,包的文档质量也很高,也有不少人为他们的包著书立传。

还有一些公司,比如微软,也会发布一些R包。微软还建了个网站,叫Microsoft R Application Network,除了发布自己的R发行版:Microsoft R Open以外,还收录了CRAN的各个时间的镜像。

类似的名门还有Rmetrics和Bioconductor,前者是数量金融领域的,后者则是生物信息领域的。

其他R包的文档

其他R包就是除了上述两类之外的了,即不是R核心小组的,也没有基金会或公司支持,来自五湖四海、各行各业的志愿者上传到CRAN、Github、R-forge上的包。

诚然,这些R包中不乏上乘之作,但其中很多R包还是有问题的。有些包虽然发布到CRAN了,但是进入CRAN的标准只是编译没问题,有文档,并不是说能在CRAN上架就是通过质量认证的。发到Github上的包就更加随意了,也许你根本没办法安装,那就更别提文档了,有的根本就没文档。

这类包,经常是非常小众的包。经常有人跟我说,使用某某包的时候,遇到问题,问我怎么解决,我就一脸惊讶,这是什么包啊,根本没听过。然后对方就解释,这是某某模型的包,我更是一脸懵圈,根本没听过啊,我是不是学了假的统计学。

这种情况,很可能是某某研究者,在研究某个问题的时候,写的一个包,就针对自己的研究,很难在你那里复用。如果你研究类似的问题,直接套用别人的包,发现有这样那样的问题,那么我劝你,不要用这个包了,既然它的代码都公开出来了,你可以仔细阅读代码,看看哪些是你用得上的,哪些是需要修改的,这才是拿来主义的正确姿势。

P.S.  这一类的包,安装出问题,使用出问题,都是常态,不要用不好就把R一关,然后下结论说:R的文档不好,R包不好,R不好。至少有一半黑R的都是这类人,自己连基础的入门帮助都没看,乱捣鼓一通,搞不出来就怪R不好用。


我们再来说说内置文档、内置Demo和小品文怎么用。


内置文档

R的内置也就是用问号(???)或help函数查出来的文档,一般是网页格式,你也可以在R的配置文件里修改成查看纯文本的形式,但是不推荐这样做,我们就不细说了。

?和??的区别是什么呢?其实 ? 是help函数的简写,?? 是help.search的简写,而help.search与help不同之处在于,查询的字符串可以是正则表达式,支持模糊匹配。所以,一个问号查不到的,就用两个问号查。

再说内置文档怎么看。一个比较完整的文档包含以下信息:

1. 函数所在包的名称,函数的描述

2. 函数调用格式

3. 参数说明

4. 细节说明

5. 函数返回值说明

6. 作者介绍与参考文献

列出参考文献真是太棒了,用R来分析数据,编程其实不难的,难的是不懂怎么建模和分析。


7. 相关函数推荐

这个功能设计得也是非常接地气,观看这么一个函数的文档,顺带着还能了解其他的包和函数,而且没有推荐一大堆不相关的东西。


8. 代码示例


内置Demo

比如我们想看glm的例子,就可以执行example("glm")来查看例子。可以看到,命令行的提示符从原来的 > 变成了 glm>

你可以执行demo()查看R里面有哪些交互式的demo可以看,比如,我们看到persp函数是有demo的,那就执行demo("persp"), 可以看到好几个跟persp函数有关的例子,每次回车就更换一个例子


小品文

我们把Vignettes翻译成小品文,它是比默认文档更为详细的文章,用来阐述包的使用,有解释,也有例子。最早小品文必须是pdf格式的,后来随着knitr的普及,现在越来越多的小品文都是html格式。

你可以执行 browseVignettes() 命令来查看你安装的R包里有哪些小品文

对于没有安装的R包,我们可以在CRAN上查看小品文,来了解这个包的用法,看是不是适合我们的问题

比如,发现一个叫d3heatmap的包,在CRAN上找到这个包的页面

打开小品文,就可以看它的介绍和用法示例了。


3. 查询文档的利器:Rdocumentation


上面也提到了,R包主要发布在CRAN上,但也有不少包发布在Github、Bioconductor等平台,这就给文档的查询带来了麻烦。

此外,有时我们从别人那里复制了一段代码过来,却搞不清调用的函数是哪个包的,要怎么查找文档呢?

别着急,现在我们有一款文档利器Rdocumentation,它可以查询CRAN、Github、Bioconductor上R包的文档,可以按关键词查询函数和包,也可以通过函数名查所在的包是哪个,如果多个包都有一样名字的函数,最后也会把这几个包都列出来。

网址是 https://www.rdocumentation.org 截图如下


首页上还有排行榜


4. 期刊

与R相关的期刊有两个:

  • The R Journal,网址是https://journal.r-project.org , 是由以前的R News发展而来。上面刊登有R社区的新闻和新包的介绍文章,文章都讲的非常详细,比自带的文档更详细。

  • Journal of Statistical Software,网址 https://www.jstatsoft.org,创办于1996年,刊登关于统计软件的文章、代码和书评等。不但有关于R的,还有关于Matlab、SAS、Stata等软件和编程语言的。


5. 图书

要说图书,那就不能不提MASS这本书了。MASS的全称是Modern Applied Statistics with S。别看书名是讲S语言的,对R语言一样是适用的,因为S语言是R语言它娘。安装了R之后,默认安装的基础包里就有个包叫MASS,便是这本书的配套R包。

这本书的作者就是R核心小组的成员,书里面讲了很多统计学模型,放到现在都可以说是“现代的”。

https://www.r-project.org/doc/bib/R-books.html 列出的书单已经很详细了,从这也可以看出R和统计学应用的范围有多广。

我个人比较推荐的是Springer出版社的Use R!系列,涉及的应用领域包括:流行病、心理测量、计量经济、生态学等。

链接 https://link.springer.com/bookseries/6991

其他出版社也有R方面的图书出版,我就不一一推荐了。以后有机会再单独写篇文章介绍。


6. 社区帮助

R是开源软件,开源软件的一个优势是有强大的社区支持。不过很多小白用户并不会有效地利用社区资源:

邮件列表

邮件列表是类似群发邮件的东东,是web 1.0时期的老古董了,90后的童鞋们可能没接触过(暴露年龄了~)。由于只能用英语交流,而且使用起来不那么方便,就不推荐大家使用了。不过,如果你不小心发现了R或者R基础包的BUG,推荐用邮件列表向核心小组报告。

https://www.r-project.org/mail.html 这里有R相关的邮件列表的介绍。


BBS或问答网站

  • Stack Overflow 是著名的问答网站,聚集了全世界的程序员,如果你有与R相关的问题,可以在 http://stackoverflow.com/questions/tagged/r 提问。

  • Cross Validated 是问答网站StackExchange的子站,专门讨论统计学、机器学习、数据分析、数据挖掘、数据可视化等问题。网址是 https://stats.stackexchange.com

  • 统计之都 是中国最早讨论R语言的BBS,还创办了影响里最大的中国R会议,到今年已经举办了十届。最近刚刚换了域名,BBS网址 https://d.cosx.org 

  • 雪晴数据网 后起之秀,提供了很多R和Python方面的课程视频、文章。与微软合办数据科学沙龙


QQ群/微信群

随着移动互联网的发展,大家生活节奏的加快,似乎国内的用户越来越不愿意在论坛提问了,更多人倾向于在QQ群或者微信群里提问。

其实我非常不建议在这种即使聊天工具上提问:

一是聊天工具里展现形式有限,你想啊,你就发几句话,描述得不清不楚的,就算用人有空,也懒得回答你的问题。关于如何提问,我后面会讲

二是聊天工具里,很多问答都不能沉淀下来,想想原来BBS的时代吧,你遇到的问题,别人也可能遇到过,你在论坛里搜索,就可以搜到答案,根本不用再问一遍。但是如果用聊天问题提问,这种便利不复存在了。

有人会说了,我在论坛提问了,没人理我啊。好吧,同学,这很可能是你提问的姿势不对。还有,你完全可以先在论坛发帖,然后把地址发到群里让大家去回答啊。


再说说如何提问吧

先看看下面这段对话

后来,在我的调教之下,这位同学终于用正确的方式提问了,他自己都找到问题所在了。

像这样的对话,我遇到过很多次,每次我都要提醒一下提问的同学,你这样提问的方式是不对的,你以为会有别人遇到跟你一样的情况,听你的描述就能回答你的问题,那你是在大海里捞针。正确的心态是,给社区里有时间有意愿的同学,创造更便利的条件,让他们能重复你的问题,然后找到问题所在

这话怎么理解呢,首先,你不能简单得上来就说,我做了某某建模,结果报错了,或者我读了什么什么数据,结果格式不对,报错了。你这样提问,没人能回答的了。

你必须用清楚的语言描述你都做了什么,具体到用了什么包,执行了什么代码,电脑的系统是什么,R的版本是多少,越具体越好,再看下面的对话

所以我说QQ群和微信群并不是很好的求助手段,你要贴报错信息、代码、数据,那么一大堆东西,用微信或者QQ就等于刷屏了。

最好的办法还是在论坛发帖,把这些东西都准备好,然后把链接发到微信或QQ上求助。

向高手求助

这一点其实跟上面很类似,只不过在BBS、问答网站或者QQ群/微信群里是需要等着高手来解答问题,是被动的。你也可以主动出击,请高手帮助,但前提是先学会如何提问。

那高手为什么要回答你的问题呢?别担心,这里有个好机会,参加我们的线下课程,就可以成为我们的VIP学员,QQ群、微信群有老师和助教守护你的代码。你可以随时提问,如果你不会提问,没关系,老师来纠正,搞不好你在这个过程中自己就找到答案了,教你正确的思维方式比直接给你代码更重要。


我们的课程采用完全的案例式教学,在案例中讲解知识点,案例选择接地气的有商业应用背景的案例,而不是用iris、titanic这种只能讲解模型不能讲解业务的玩具数据。

案例一: 针对一份电子商务网站的订单数据,从产品、客户、地区等维度来分析销售额和利润,也可以时间的维度纵向分析销售趋势。

案例二: 抓取中国政府网历年政府工作报告,并做文本分析

案例三: 某连锁餐厅为提高营业额,做了一次市场调查,根据收集到的数据,分析是哪些因素影响营业额,并提出改善经营的建议

案例四: 预测贷款逾期者(银行业) -- 某银行希望根据客户过去的贷款数据来建模,以便用模型来预测新的贷款者,核贷后会逾期的机率,以做为银行是否核贷的依据,或提供给客户其他类型的贷款产品。

案例五: 零售业销售促销(零售业):此案例的目的是想根据零售产品过去的促销记录,利用神经网络及回归树(Neural Network & Regression Tree)来预测未来的销售成效。

感兴趣的同学请点击下面的图片来查看详情。



请尊重作者的劳动,转载请务必将上面的广告也带上