最近两天读R的手册效率奇高无比,公然是和跟taiyun说起的一样,“有需求便有动力”。昨天一上午看完了ggplot2的手册,固然有些艰涩难解,可是照旧很好的体系领略。p.s. ggplot2新手推荐「Cook Book for R」,先用起来再逐步转头看道理嘛。ggplot2也是延年益寿的利器,嗯…默认的图都看起来好专业,嘻嘻。
回到本文的正题。看完了ggplot2之后,下一本被我扫荡的手册就是「Data Manipulation with R」,根基的数据整理操纵。虽说数据整理是一件很没有技能含量只是耗时间的工作,可是正因如此节减起来时间也是大把大把的,即刻以为人生加快运行了许多几何。说来忸怩,用R也有些年初了,一直没有静下心来好好的研究根基的R数据操纵方法,老是碰着问题才会亡羊补牢似的上网开始搜,亏得此刻stackoverflow.com这些网站累积了大量雷同的问题,所以搜起来也算利便。但终究不是个持久之计,当忍者太久了总以为照旧应该老诚恳实的进修一下王道正术。于是,开始花些时间细细的研读起在R内里收拾数据的那九九八十一招。
简朴记录一些以前忽略的函数之类的。许多来自神奇的plyr包,假如直接?调不出来辅佐那就先加载这个包吧。
expand.grid() : 最开始用R的时候,数据都是课本内里给的,整理的类型的很,根基就是挪用一个lm()之类的函数扔进去就可以了,所以习惯于直接用factor范例相乘。厥后发明常常要成立一些factor相乘出来的矩阵/data.frame之类的对象,却一直不知道怎么办。终于找到了这个函数,嘻嘻。哎,我是有何等懒才一直没有去搜这个需求啊。
cut():yihui兄前阵子提到的很是elegent的函数之一(另一个是with(),哎我居然连这个都一直没留意过),根基就是独霸续变量离散化,即numeric型的数据转换成factor型的万能钥匙。
which():大概以前也没大用到雷同的需求,所以没留意。一般来说,对付逻辑型的数据(很大都据筛选问题最后都可以归为逻辑型数据问题),只是选择出来切合条件的元素照旧较量容易的,所以一直没寄望这个函数。简而言之,就是这个函数返回的不是切合条件的元素的值,而是他们的位置(好比在一个vector中的位置,即下标)。这样有时候照旧较量利便的~
with():这个就不多说了,根基拯救了需要attach(), detach()的处所,不消常年打dataframe的名称了。p.s. 不知道是什么缘故,许多R的教程上会用attach/detach,但实际中其实很不发起利用啊,容易把object搞混的。
arrange():当你需要对一个data.frame举办凭据多列依次排序的时候,就不需要依次order了。说来有趣,它的函数辅佐内里简捷明白,“This saves a lot of typing!”,可以少打字的都是好对象,嗯嗯。
cat():其实也用到过,只是许多时候更习惯paste(),究竟不是所有的时候都要直接输出。不外需要的时候,照旧比print()加paste()利便一些吧。看思考习惯了。
substring():常年只会用substr(),其实这两个函数蛮像的,只是参数差异。部门环境下substring()会更利便一些,不外横竖有length(), nchar()这种对象,其实问题不大。
aggregate(), cast():前几天gaotao回覆的时候提到的函数,其实某种水平上我此刻更喜欢data.table()了…
apply类:sapply(), apply(), lapply(), mapply(),根基就是没落显式轮回的利器(虽然没落轮回不只仅是雅观目标,照旧提高效率的不二瑰宝,后头更是各类并行处理惩罚的根基架构函数,好比RHadoop重写的那堆函数)。虽然,其实有的时候我会更倾向于把显式轮回写出来(假如轮回量不大好比<10并且每一次轮回都还挺快的话)。这么做固然效率上牺牲了一点,可是提高了代码可读性啊,就不消写许多注释提醒本身为什么其时这么弄了。由此可见我的编程程度根基逗留在翻译脑筋内里的逻辑化思维进程的模式,并没有实质性的在措施自己架构的角度来思考编程逻辑。咳咳,人家是做阐明的,不是码农,效率的问题交给专业人士去办理吧,我更喜欢专注于思考阐明的逻辑(何等惨白无力的抵赖,从来不愿在编程上道理上多花工夫的孩子飘过)。
临时就是这些,最喜欢的就是R这种无限的大概性,总有人会贴心的帮你写好许多函数,然后傻傻的打一个?,看看函数怎么挪用怎么附上参数就可以了。这才是优美的人生嘛,不喜欢过多存眷那些脏活累活背后的道理,计较机本身辛苦去好了(虽然尚有那些辛勤的R包开拓者们,嘻嘻,谢过各人的尽力劳动)。不是有句话么,「科技都是为懒人处事的」。越来越附和taiyun这次在北京R会上的惊人之语——省时间就是延年益寿。