对于没有编程经验的人,R 语言是否很难掌握?

对于没有编程经验的人,R 语言是否很难掌握?

谢邀。最近工作很忙,一直想回答这个问题,已经有这么多很好的回答了,感谢

提到我那更新缓慢的小博客,这里我就自己学习和使用R的体会做一些回顾和总结。

首先,我在我的

项目中比较系统地介绍了一下R是什么(

)。简而言之,R是一套主要致力于统计计算、数据探索、数据分析、数据可视化的一个编程语言、计算环境、社区以及生态系统。如果题主的学习背景和工作与这些毫不相关,并且毫无背景知识(例如统计学)和基本训练(例如基本编程),那么短期来看学习R的难度是不小,并且收益难以评估,可以说没有明显的收益。但是我相信没有多少人愿意为自己的前途划定一个不可逾越的限制,而帮助你突破这些限制的往往就是看起来「没有作用」的缓慢积累。

因此,我鼓励题主学习R这样的强大工具来优化自己的思维方式,理由我在

中已经作出了充分的说明。不过有一个前提是,最好是先把计算机本身弄熟练一些,再使用计算机中更加高级的工具,例如我在

中回答的那样,先把Excel这种容易上手、可见即可得的工具掌握熟练一些(先满足务实的基本需求),之后才比较容易上升到较为抽象的编程世界(再满足更高层次的精神需求)。

另外,用学习时间长短来衡量学习效果,对于编程几乎是无效的。学习1年,没有真正开发过比较全面的项目,其实水平远比不上学习半年,做过好几个实战项目的人。因为有时间压力的实战训练,才是真正能够提高水平的学习方法。

还有,我想帮助题主澄清几个观念。与其把R简单地看作一个「统计软件」,不如说R除了是一个统计软件,即统计计算环境之外,而是一门设计完善的编程语言,更加是一个快速成长的社区,是能够将非IT领域的前沿知识(例如最新的统计工具)快速转化为生产力的生态系统。在学习中最基本的就是掌握R作为编程语言的语法规则(syntax),之后就是通过学习和各种项目积累处理各种数据的手法、流行扩展包的使用技巧等等,在此过程中参与到社区当中去,去看大家在

中的问答,参与到GitHub中托管的上千个R扩展包的issue report和改进中,在这个过程中你学到的R才是有灵魂的,才是与时俱进的;如果只是自己看教程,不实战、不参与社区互动,那么你学系到的R就是死的,没有灵魂,不会更新,很快就将被你的大脑清除出去。

当然,如果只是希望学习到最基本的层次,例如简单地操作一点数据等等,那完全没有必要把R学得很精深,只需要按照在线课程掌握基本的一些函数和表达式即可。

因此,我对「对于没有编程经验的人,R语言是否很难掌握?」这个问题的回答是「比较难」。就好象「对于没有游泳经验的人,游泳是否很难掌握?」「对于没有素描经验的人,素描是否很难掌握?」「对于没有炒股经验的人,炒股是否很难掌握」,回答都是「如果只是跳进去泡两下」「如果只是勾几笔」「如果只是下单撤单」,那么回答就是「很简单」;如果真的要严肃的「游泳」「素描」「炒股」...天下的任何事情,回答都是「比较难」。

如果不是「比较难」的话,那么R在数据科学中领域中的薪资回报就不可能是最高的了。

===

稍微补充,最近把

项目弄成了一个Gitbook,在缓慢更新中,里面涉及了统计、金融领域需要掌握的从基础到高级的R的主要内容,下面是个简单的大纲,可以自测R的学习水平。

Quick start: What is R? Why R? How to install R? RStudio, First model

Basic objects: Vector, Matrix, Array, List, Data frame, Function, Formula

Basic expressions: Assignment, Condition, Loop

Basic functions: Environment, Package, Object, Logical, Character, Math, Statistics, Data, Graphics

Basic statistics: Preparing data, Descriptive statistics, Linear regression, Hypothesis testing, Model analysis, Time series modeling

Basic data mining: Using models, Cross validation

Basic grahpics: Scatter plot, Line plot, Bar chart, Pie chart, Histogram, Composing plots, Partitioning plots, Graphics devices

Inside R: Lazy evaluation, Dynamic scoping, Object searching, Memory management, dot-dot-dot, Functions, Environment, Expression, Call

Data structures: S3 object, S4 object

Database: SQL, Excel workbook, SQLite, SQL on data frame

Parallel computing: parallel package

Functional programming: Anonymous functions, Closures, Higher-order functions

Profiling: Computing time, Memory usage

Advanced graphics: Interactive graphics, ggplot2, ggvis

Popular-packages: stringr, reshape2, rootSolve, Rsolnp, plyr, dplyr, data.table, pipeR, jsonlite, Rcpp

===

最后,赞同

的说法,脱离了统计和计量的基础使用R没什么太大意义,就好象给你一个强大的扳手,结果你根本不认识什么是螺丝钉。