一直困惑,在R语言的包中,除了函数之外还有数据。为什么?
昨天试了下,发现可以用双冒号的形式访问包中的数据。
有过OOP经验的程序员,都知道双冒号的意义——静态访问类的成员属性和方法!
这岂不就是?岂不就是!R语言中所谓的包,完全可以理解为一个封装好的类!其包中的数据,就是这个类的成员属性,而包中的函数,就是这非常之对象的成员方法!
datasets::airquality
这就是,访问R中数据集的面向对象式实现!
区别是,R中无所谓实例化,只有用静态的方式使用。而且啊而且,回想起Python中import或者from.import之后,都可以用包/库名加点号的方式访问包中的函数。而这又跟JavaScript之中的JS对象访问方式异曲同工。彼时就模糊的感觉到,所谓的函数式编程,其实也是面向对象的某种阶段性实现,或许不管是面向过程、面向对象、或是基于对象、以及函数式编程。其中在必然有某种一成不变的Core。
笔者今天在学习dplyr包时,读到他人博文【转载】R语言扩展包dplyr笔记中所写,更是感慨相见恨晚。
首先,dplyr包是对plyr包的进一步细分,更优秀地处理某些结构化数据。
遵从于它的设计理念,对数据框的处理更加方便和人性化。简单的函数实现使用R自带函数几十行才能完成的功能。有某种偏执倾向的程序员,喜欢研究各种复杂的算法,他们尤其不能容忍“这么简单的问题我怎么做不出来呢”的事情发生,而原文作者提到的一个理念就是不要重复造轮子,有就用。
其次,dplyr包中引入的%.%
操作符,目前没来得及细细研究。但根据作者的实例,可以看出也是为了方便程序员思考的一种设计。最让人激动的是,如果我的理解没有太大偏差,它实现了类似于ThinkPHP数据库操作中的连贯操作。即一步一步思考,并实现,不会被其他事情扰乱思绪,不用纠结于naming things。
将工具工具化:所有这些的核心目的就是:让程序员从底层原理中脱离出来,针对数据本身,和业务逻辑,进行宏观思考。
诚然,数据预处理经常占到整个数据分析工作的60%以上,但如果这个过程不是stuck在对数据的理解,而是计算机的实现上,就应该考虑是不是工具的问题了。在这种时候,或许我们该学习乔布斯的执着,让机器适应人的思考方式,而不是相反。(用HJKL四个按键作为上下左右的Vim编辑器可以狗带了)
我相信,真的有一天,程序员可以不用写任何代码而又能称自己为程序员。因为,想就够了。we can do it just think
网友评论