《R的极客理想—工具篇》—— 1.1 R是最值得学习的编程语言

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介:

本节书摘来自华章出版社《R的极客理想—工具篇》一 书中的第1章,第1.1节,作者:张丹,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.1 R是最值得学习的编程语言

问题
为什么要学R语言?

a66419f8e69dc8956e571ba28295a9ef5d26c4d4

引言
如果要问在Node、Lua、Python、Ruby和R这5种语言中,哪个语言在2014年的应用前景会更好,我会毫不犹豫地选择R,而且我认为R语言不仅是2014年,也是以后更长一段时间内的明星。在本书开篇,我们就谈谈为什么R语言是最值得学习的编程语言。

1.1.1 我的编程背景

本人是程序员、架构师,从编程入门到今天,一直深信着Java是改变世界的语言,Java已经做到了,而且一直很辉煌。但当Java越来越强大,覆盖领域越来越多,变得无所不能的时候,它反而不够专业,这就给了其他语言发展的机会。
我已使用Java语言11年,R语言3年,Node 1年,对于这个问题 “哪个语言在2014年的应用前景会更好”,我选择R语言。

1.1.2 为什么我会选择R

从下面的9个方面来说明我选择R的原因。
R的基因
R的发展
R的社区和资源
R的哲学
R的使用者
R的语法
R的思维模式
R解决的问题
R的不足

  1. R的基因
    1992年,新西兰奥克兰大学的Ross Ihaka和Robert Gentleman 两位统计学家,为了方便教授初等统计课程,发明了一种编程语言,因为他们名字的首字母都是R,于是R便成为这门语言的名称。

从开始学习R语言,我就开始了知识的跨界思考。统计学基于概率论,概率论又基于数学,用计算机的方式编程,同时解决某个领域的实际问题。多种学科知识的交集,决定着我们解决问题的能力。统计的基因,让R语言与众不同!

  1. R的发展
    R一直在小众领域成长着,最早也只有统计学家在用,主要用来代替SAS做统计计算。然而时代在进步,随着大数据的爆发,R终于在这一波浪潮中被工业界所发现。然后,越来越多有工程背景的人加入到这个圈子,对R的计算引擎、性能以及各种程序包进行改进和升级,让R获得了新生。

我们现在用到的R语言软件,已经越来越接近工业软件的标准了。由工程师推动的R的发展,其速度远远地超过了由统计学家推动的发展。随着人们对数据分析需求的进一步增加,R会以更快的速度继续发展,将成为免费的、开源的数据分析软件的代名词。

  1. R的社区和资源
    R的发展离不开R的各种社区支持,尤其是R的官方社区支持。在R的官方网站中,我们可以下载到R语言软件、R的第三方软件包和R的其他支持软件。当然,我不得不承认R的官方网站从Web页上看起来太简陋了,稍微调整一下CSS样式表,都会比现在好看很多。也许这种简单、无修饰也是统计学家的基因吧。R语言的社区资源同其他语言一样丰富,除了官方社区,还有开发者论坛、R-Journal列表、软件包列表、R语言图书列表以及R用户组等。

R是自由软件,因此开发者可以开发自己的软件包,封装自己的功能,然后在CRAN上面发布。截止到2014年2月,共有5236个R包在CRAN上面发布。可能很多人会说只有5236个包,数量太少了。这是因为CRAN是需要提交申请的,每个包都必须经过R语言小组审核、检查后才会发布出来,而且审核非常严格。高质量是发布一个新的R包的基本要求。由于CRAN过于严格的审查,让很多开发者选择在RForge上发布R包,还有些R包是基于Github发布的,我也在Github上面发布了自己的R包 。

  1. R的哲学
    每种语言都有自己的设计理念和哲学,而我体会的R的哲学就是“静下心做事情”。R不需要很长的代码,也不需要设计模式。一个函数调用,传几个参数,就能实现一个复杂的统计模型。我们需要思考的是用什么模型、传什么参数,而不是怎么进行程序设计。我们可能会用R实现“从一个数学公式,变成一个统计模型”的过程,我们也可能会考虑“如何让一个分类器结果更准确”,但我们不必思考一个算法的“时间复杂度是多少,空间复杂度是多少”。

R的哲学,可以让你把数学和统计学的知识,变成计算模型,这也是R的基因所决定的。

  1. R的使用者
    R语言早期主要是学术界统计学家在用,后来逐渐被其他很多领域的学者所用。R语言有各种不同的应用领域,包括统计分析、应用数学、计量经济、金融分析、财经分析、人文科学、数据挖掘、人工智能、生物信息学、生物制药、全球地理科学、数据可视化等。

近几年,由互联网引发的大数据革命让工业界的人开始认识R,加入R。当越来越多的有工程背景的人加入到R语言使用者的队伍后,R才开始向着全领域发展,逐步实现工业化的要求。现在,R已不仅仅是学术界的语言,它还是工业界必备的语言。
下面列出一些推动R语言在工业界发展的R包。
RevolutionAnalytics公司的RHadoop产品,让R可以直接调用Hadoop集群资源。
RStudio公司的RStudio产品,给了我们对编辑软件新的认识。
RMySQL、ROracle、RJDBC打通了R和数据库之间的访问通道。
rmongodb、rredis、RHive、rHBase、RCassandra打通了R和NoSQL数据库之间的访问通道。
Rmpi、snow打通了单机多核并行计算的通道。
Rserve、rwebsocket 打通了R语言的跨平台通信的通道。

  1. R的语法
    R是面向对象语言,语法如同Python。但R的语法很自由,很多函数的名字看起来都是那么随意,这也是R的哲学的一部分吧!例如,看到如下这样的赋值语法,有其他语言基础的程序员,肯定会崩溃的。
> a<-c(1,2,3,4)->b
> a
[1] 1 2 3 4
> b
[1] 1 2 3 4

随机取正态分布N(0,1)的10个数,又是这么的简单。

> rnorm(10)
 [1] -0.694541401  1.877780959 -0.178608091  0.004362026
 [5]  0.836891967  1.794961298  0.115284187  0.155175219
 [9]  0.464028612 -0.842569561

用R画鸢尾花的数据集的散点图,有非常好的可视化效果。

 data(iris) #加载数据集
  head(iris) #查看前6行数据集
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

 plot(iris) #画图

输出结果见图1-1。

dfb33d0c8356972331c54a57bbac8ca9cd3674eb

正是因为R自由的哲学,让R的语法独特而简洁,我已经喜欢上这种哲学了。

  1. R的思维模式

R语言让我跳出了原有的思维定式。使用R语言,我们应该像统计学家那样思考问题,而不是拘泥于程序员的思维模式。统计学家的思维模式,是先考虑为什么,再考虑做什么。而程序员的思维模式,是直接考虑怎么做,等有了结果再考虑为什么。
R语言是直接面向数据的语言。在我们的日常生活中,无论做什么事情都会产生数据,上网有浏览数据,买东西有消费数据,就算什么都不干,也会受大气PM2.5的影响,有空气污染指数数据。利用R语言,我可以直接分析这些数据。面向什么业务,就分析什么数据,不需要从产品经理向程序员的角色转换,不需要考虑有什么功能,更不需要考虑程序设计的事。跳出程序员的思维模式,我们所能认知的东西会更多,于是也能找到更适合自己的定位。

  1. R解决的问题

当数据成为生产资料的时候,R就是为人们能运用生产资料创造价值的生产工具,R语言主要解决的是数据的问题。整个人类文明所获得的全部数据中,有90%以上是自互联网诞生以来产生的;当Hadoop帮助人们解决了大数据存储的问题后,如何发现数据的价值,则成为当前最火的话题。R语言具有强大的统计分析能力,这就让它成为数据分析最好的工具。所以,R要解决的问题,就是如何挖掘数据价值的问题。

  1. R的不足

尽管前面说了R的各种优点,但我们依然不能说R就是完美无缺的,因为R也有很多不足。具体来说,R的缺点有下面5个。
R软件是统计学家编写的,并不如软件工程师编写的软件那么健壮。
R软件的性能,存在一些问题。
R语言很自由,语法命名不太规范,需要花时间熟悉。
R语言的内核编程,要比普通的R包使用,难度大得多。
R语言结合了很多数学、概率、统计的基础知识,学起来有一定门槛。
R的这些不足,都是可以克服的。当有更多有工程背景的人加入的时候,R语言会比现在更强大,会帮助使用者创造更多的价值。

1.1.3 R的应用前景

R可以做所有SAS能做的事情。SAS系统全称为Statistics Analysis System,是国际上最知名的商业分析软件工具之一。SAS用于决策支持的大型集成信息系统,其重要组成部分和核心功能是统计分析功能。在数据处理和统计分析领域,SAS系统被誉为国际上的标准软件系统,堪称统计软件界的巨无霸。
R和SAS处于完全的竞争的关系中,R的免费和开放,让R有着更广阔的应用前景。下面给出当今R应用最热门的领域。
统计分析:统计分布、假设检验、统计建模。
金融分析:量化策略、投资组合、风险控制、时间序列、波动率。
数据挖掘:数据挖掘算法、数据建模、机器学习。
互联网:推荐系统、消费预测、社交网络。
生物信息学:DNA分析、物种分析。
生物制药:生存分析、制药过程管理。
全球地理科学:天气、气候、遥感数据。
数据可视化:静态图、可交互的动态图、社交图、地图、热图、与各种JavaScript库的集成。
本书会介绍R语言在统计分析、金融分析、数据挖掘、推荐系统、社交网络等领域的应用。R有着非常广阔的应用前景,而且R也将成为新一代的最有能力创造价值的工具。

1.1.4 时代赋予R的任务

R语言是在大数据时代被工业界了解和认识的语言,R语言被时代赋予了挖掘数据价值、发现数据规律以及创造数据财富的任务。R语言也是帮助人们发挥智慧和创造力的最好的生产工具,因此我们不仅要学好R语言,还要用好R语言,为社会注入更多的创新的生产力。
总而言之,在这5种语言中,R是最特殊的,R被赋予了与其他语言不同的使命。R的基因决定了R将成为2014年,也可能是以后更长一段时间的明星。因此我认为“R是最值得学习的编程语言”。不论你正在读书,还是已经工作,掌握R语言这个工具并找最适合自己的位置将会前途无量。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
7月前
|
存储 Ubuntu Shell
使用 Python 创造你自己的计算机游戏(游戏编程快速上手)第四版:致谢到第四章
使用 Python 创造你自己的计算机游戏(游戏编程快速上手)第四版:致谢到第四章
135 0
|
4月前
|
Rust 安全 Go
揭秘Rust语言:为何它能让你在编程江湖中,既安全驰骋又高效超车,颠覆你的编程世界观!
【8月更文挑战第31天】Rust 是一门新兴的系统级编程语言,以其卓越的安全性、高性能和强大的并发能力著称。它通过独特的所有权和借用检查机制解决了内存安全问题,使开发者既能享受 C/C++ 的性能,又能避免常见的内存错误。Rust 支持零成本抽象,确保高级抽象不牺牲性能,同时提供模块化和并发编程支持,适用于系统应用、嵌入式设备及网络服务等多种场景。从简单的 “Hello World” 程序到复杂的系统开发,Rust 正逐渐成为现代软件开发的热门选择。
76 1
|
4月前
|
Rust 安全 程序员
Rust 语言的防错机制太惊人了!安全编码从此不再是难题,快来一探究竟!
【8月更文挑战第31天】《安全编码原则:Rust 语言中的防错机制》探讨了代码安全的重要性,并详细介绍了Rust语言如何通过内存安全模型、所有权与借用规则等特性,在编译阶段检测并阻止潜在错误,如缓冲区溢出和悬空指针。文章还讨论了类型安全、边界检查等其他安全特性,并提出了遵循不可变引用、避免裸指针及充分测试等实用编码原则,以进一步提升代码质量和安全性。随着Rust在软件开发中的应用日益广泛,掌握其安全编码原则变得尤为重要。
75 0
|
6月前
|
存储 人工智能 算法
计算机编程:从基础到实践,探索编程的奥秘
计算机编程:从基础到实践,探索编程的奥秘
76 1
|
6月前
|
机器学习/深度学习 存储 自然语言处理
惊艳!老司机熬夜总结的Python高性能编程,高效、稳定、快速!
Python 语言是一种脚本语言,其应用领域非常广泛,包括数据分析、自然语言处理机器学习、科学计算、推荐系统构建等。 能够轻松实现和代码跑得够快之间的取舍却是一个世人皆知且令人惋惜的现象而这个问题其实是可以解决的。 有些人想要让顺序执行的过程跑得更快。有些人需要利用多核架构、集群,或者图形处理单元的优势来解决他们的问题。有些人需要可伸缩系统在保证可靠性的前提下酌情或根据资金多少处理更多或更少的工作。有些人意识到他们的编程技巧,通常是来自其他语言,可能不如别人的自然。
|
7月前
|
存储 缓存 算法
【C 言专栏】C 语言实现算法的高效性
【5月更文挑战第6天】本文探讨了C语言在实现高效算法上的优势,包括其高效性、灵活性、可移植性和底层访问能力。关键点包括选择合适的数据结构(如数组、链表、树和图)、应用优化策略(如减少计算、空间换时间、分治和动态规划),以及内存管理和代码优化技巧。通过实际案例(如排序和图遍历算法),阐述了如何利用C语言实现算法高效性,并强调在实践中不断探索和优化以提升算法效率。C语言在计算机科学中的重要地位使其成为实现高效算法的首选工具。
126 0
【C 言专栏】C 语言实现算法的高效性
|
7月前
|
存储 Shell Go
使用 Python 创造你自己的计算机游戏(游戏编程快速上手)第四版:第五章到第九章
使用 Python 创造你自己的计算机游戏(游戏编程快速上手)第四版:第五章到第九章
157 0
|
7月前
|
算法 程序员 C语言
【高效编程技巧】编程菜鸟和编程大佬的差距究竟在哪里?
【高效编程技巧】编程菜鸟和编程大佬的差距究竟在哪里?
73 0
|
7月前
|
前端开发 JavaScript Java
揭秘各种编程语言在不同领域中的精彩表现
揭秘各种编程语言在不同领域中的精彩表现
|
安全 前端开发 Java
2023年值得学习的六种小众编程语言
2023年值得学习的六种小众编程语言
216 0