备受推崇的《R语言实战》真的值得如此好评吗?

浏览: 1526

作者:刘洋溢  R语言中文社区专栏作者

知乎ID:https://zhuanlan.zhihu.com/p/51396601


阅前思考:

R语言入门必看的《R语言实战》真的是很好的入门书籍吗?这本书值得如此推崇和好评吗?你在阅读这本书的时候觉得这本书实用吗?你觉得如何学好一门计算机语言?

R in Action真的那么好吗?

《R in Action》(中译名可能更加为人所熟悉:R语言实战)一书非常得火爆,也获得了众多R使用者的好评。2016年,作者还进行了大篇幅的更新,新增了近200页内容。在豆瓣读书、统计之都以及知乎的R话题下,该书几乎都是清一色好评,也是被推荐次数最多的R语言书籍。特别地,它大概也是各类社区中被推荐最多的R入门教程,可能没有之一。

但我们不禁要问,这本书真的值得如此好评和推崇吗?真的是很好的入门书籍吗?

这个问题令我想起了我初学R的经历。那时因为很快就要在工作中大量进行数据分析和统计建模工作,我决定抓紧一切时间学习R这门为统计而生的语言。彼时Springer出版社刚好出版了一套关于R的书,每本都是200页左右的小册子,着重覆盖一个核心主题,从基本的data manipulation,到applied econometrics中的常用计量模型的实现,以及统计和衍生品定价中经典的Monte Carlo simulation,等等,不一而足。我顿时感觉如获至宝,将能找到的书都找出来,一本一本看,并自己敲代码,以熟悉这些操作。

于是,很快,我感觉自己什么都会了,各种统计分析操作,都可以轻松应对。于是我信心满满地投入了新工作,力图用自己所学的技能,从数据中去挖掘资产价格变动的规律,帮助我的小伙伴构建可以持续盈利的交易策略。然后,问题来了,而且是接踵而至。我发现我不断地遇到问题/状况,比如,数据不齐整,某一行数据有缺失,标准的数据读取函数无法正确读取数据。又或者,对收益率时间序列进行分析时,发现其中有NA,导致标准package里的函数无法使用。再如,我找不到现成的函数做测试,于是自己写了个循环,发现也许算一天也算不出来。更为可怕的是,当我过几天回头去看之前的代码时,我已经不知道自己当时的想法了,仿佛就是我从来没写过这些代码一样。

(欲知更多我与R的故事请戳:R语言不止可以做数据分析,还可以变着方法玩出花

以上可能是很多新手遇到过的囧境。这一点,《R in Action》可能实在难以给出有效帮助。事实上,Springer的这一系列,每一本书,在它所着重的那一方面,都讲解地很清晰,例子也很详实,相比《R in Action》一书,可能还要更细致。这每一本书,我也都自己一行一行地敲代码,认真学习过。然而,我还是不可避免地犯错,遇到问题,然后,手足无措。

回头看,那时真正缺乏的,是对整个语言的系统性的、高屋建瓴的理解,是不懂编码规范,也不懂遇到问题的解决步骤,所以对于一个已经写过的具体问题,大概可以折腾出来,但对于不懂的问题,对于需要整合的代码,就没法推进工作了。
这一点,《R in Action》可能也是同样的。

以我自己和身边朋友的经验教训而言,对于编程/数据分析语言,尤其是这类所谓的高级语言,学习的最佳路径是先了解最基本的概念和操作,然后就试着去做项目,无论是工作可能需要的,还是纯粹自己感兴趣的。当然,最好是后者,这样你的压力感不会那么大,动力感则更足,更为重要的是,你可以充足地从一个十分简化的方案着手,一步步去完成、扩展你的项目。在这个过程中,遇到问题,善用google等搜索引擎,你会找到那些知名的开源社区上,很多人曾经遇到过相似的问题,并从别人那获得了帮助。你可以借鉴这些经验,来优化你的项目。对于这些学习,干中学是最好的。

这一点是很重要的,但这并不是本文的重点。与前述对《R in Action》一书的分析相关的另一点是,它没有很好地给出R作为一门统计建模/编程语言的整体架构,例如核心功能、数据结构、编程范式,和它们背后的设计原理,与其他语言的关联,以及由此衍生出的特征与优缺点。而这些,对于真正掌握这门语言,熟练应用于实际的建模和项目中,是极其重要的。

这也是为什么,虽然如此多人都强烈推荐它,但我仍然并不赞同的核心原因。反而,我更推崇Hadley Wickham大神的《Advanced R》,虽然理论上这本书应该是进阶读物。

说起来,了解的朋友都知道,作为一个R重度用户,对Hadley大神我自然是赞不绝口的,甚至可以说,他在相当程度上改变了R语言。而在这本系统性论述R语言使用的书里,Hadley则从相当的高度,将R的设计和特征娓娓道来。举个最简单的例子,关于数据结构,一般的书里会告诉你,R的数据类型包括vector、matrix、array、data.frame、list这几种基本数据类型,而这4种类型各有其用途和限制:vector保存一维数据,且必须是同类型的,matrix可以保存二维数据,array则用于保存多维数据。而data.frame用于保存矩阵,但不同列可以是不同类型,list则可以保存任意类型的元素。特别地,我们在实际使用data.frame时,查看其类型,往往会发现,除了data.frame,它也是list。而其他拓展包可能还包括其自定义的数据类型。看起来还蛮晕的,对吧?但Hadley会很直接地告诉你,R的数据结构分为两类,一类要求其元素都是同一类型的,另一类则不要求。前者进一步依据数据维度分为vector、matrix和array,后者则统统都是list,且在数据刚好为矩阵形式时,可以转化为data.frame这种特殊结构。

这只是一个小例子,也许也没有完全展示清楚《Advanced R》一书的高度,但大家应该大体有个感觉,二者的角度/高度是不一样的。只要仔细阅读完书籍,类似的对比可以发现非常多。当然,《R in Action》本身仍是好书,只是实战并不仅仅靠看书或者跟着书敲代码就可以学会,而是需要实打实的项目实战经验。与此相反,整体的综合性的视野,相当程度上就是读书可习得的,尤其是此前对此没有经验、白纸一张的朋友,更加容易接受这些想法和理念。这也是我个人非常推崇直接学习《Advanced R》一书的原因。而且,事实上,《Advanced R》对于诸多基本概念也有讲解,而且更加深入,完全可以用于入门学习,只是对于新手,一开始不用学习高级主题而已。此外,《Advanced R》一书本身以gitbook的形式提供免费版,且今年刚正式发布了第2版。

当然,事实上,读者们对此总体上还是有客观的评价的,以豆瓣读书为例,《R in Action》不同版本总体的平均得分接近9.0,而《Advanced R》平均分则高达9.7。但一方面差距并不足以非常明确地体现差异,另一方面,更为重要的是,前者评价数超过1000,而后者不到100。数量的差异很明显地显示,《R in Action》的读者群要庞大得多,个人觉得这并不是非常理想的现象。

授人以鱼,不如授人以渔

当然,本文想讨论的,并不仅仅是一本书而已,何况这本书本身仍不失为好书,只是相较之下,个人更推崇另一本而已。更重要的是这个判断背后的逻辑:

从足够的高度,讲清楚一个软件,一套理论,或者anything else背后的逻辑和原理,比单纯告诉人怎么应用,对人的帮助,会大得多。用一个类似的成语来表达,就是授人以鱼,不如授人以渔。

举个例子。学经济类专业的朋友应该知道,经济学主要研究资源配置与人的选择的,其中,微观经济学主要研究单个个体的决策选择,而宏观经济学则侧重研究整个经济体中的诸多变量,对经济均衡、经济增长和经济波动的影响。微观经济学的一大基础是效用函数,经济理论一般假设所有人的决策行为都是在约束下最大化效用。虽然效用难以准确定义,但这一框架符合直觉,是可以接受的起点。然后问题就来了。老师们在上课时,往往会直接粗暴地假定,效用函数为某种特定的形式,这种形式看起来是相当不可思议的。与此同时,对于那些满是疑惑的好奇宝宝们,老师往往会说,出于求解的便利(比如为了获得漂亮的解析解),我们需要这样的假定。呃,等一等,我们是在做应用题吗?我们学这些的目的,是想要用于实际的分析诶。当然,更有甚者,学宏观经济学和金融资产定价的同学可能知道,为了简化分析,效用函数通常被假定为所谓的CRRA形式(constant relative risk aversion),而这种效用函数是满足CRRA特征的最简单的函数形式。

是不是很绝望?这样脱离现实的粗暴假定,学习之后,敢用于实际的建模分析吗?其实老师们完全可以稍微做得更好,哪怕仍然是直接抛出这些假定,只要在做出这些假定的同时,告诉同学们,这些假定是如何一步一步构造出来的,除了便利求解之外,它们与现实生活有什么关联(例如,是依据对现实世界的观察所做的假定,或者只是一定程度的偏离,在后续的模型中,通过某种调整,就可以逼近真实,抑或如科学哲学理论所讨论的,据此构建的理论可以很好地解释生活中的真实事件,理论未被证伪,我们不用过于担心假定的真实性)。


另一个类似例子是我自己近年研究较多的FoF与智能投顾。随着资产管理行业的大发展和金融科技的浪潮,FoF和智能投顾近年也从美国引入中国,快速地发展起来。但仔细研究你会发现,整体上,无论是商业模式、还是具体的投资策略、人才管理,国内与美国的情况都有很大差别,是否能很好地发展,以及如何参与,能最好地为潜在用户提供服务,构建起自己的商业模式和生态,实际上非常复杂。但很多相关的书籍资料,也都是泛泛地进行一点介绍,随即对几个常规策略进行一点介绍,并没有较为系统的梳理,以及投资策略表现的深入剖析。这其实非常不好。终端投资者和潜在用户如果不能理解这些产品和服务能帮他们做什么,以及产品确实不能帮他们创造价值,那这条路就会很难走得长久,甚至行业的名声都可能被败坏掉。这些也是我在尝试进行相关的写作的一个重要推动力,虽然自己也微不足道,但尚且对此有一些研究和一些理想,希望尽自己的绵薄之力。当然,这是题外话了。

最后,话说回来,在这篇短文中,我并不是要刻意强调《R in Action》不好,事实上,我仍然赞同它是一本好书(百科全书式的),只是结合这么多年的经验教训与观察,个人认为授人以鱼不如授人以渔这句古训讲得实在是好,对于统计建模和编程这类需要深入理解才能真正在实践中用好的工具的学习,这一点可能尤其重要。特别地,对于诸如经济学、金融学等以实践为主要目的的学科,最好的教学/学习思路一定是这样。


小编语:

小伙伴们应该也对《R in Action》有自己的感受,大家可以将自己对这本书的感受,想强烈推荐的R入门书籍或者你认为学好一门语言应该如何做等问题的答案写在评论区。

相关推荐阅读:



公众号后台回复关键字即可学习

回复 爬虫             爬虫三大案例实战  
回复 Python        1小时破冰入门

回复 数据挖掘      R语言入门及数据挖掘
回复 人工智能      三个月入门人工智能
回复 数据分析师   数据分析师成长之路 
回复 机器学习      机器学习的商业应用
回复 数据科学      数据科学实战
回复 常用算法      常用数据挖掘算法

推荐 0
本文由 R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册