有
关Hadley Wickham
“
采访者:“你平时生活那么邋遢还好意思把自己的包取名 tidy-verse?”
Hadley(羞涩脸):“那总比别人叫他们 Hadley-verse好吧!” ╮(╯╰)╭
”
Hadley Wickham,一个R圈如雷贯耳的人物,仅仅列举几个他开发的R包你就能知道他的分量了:ggplot2、dplyr、stringr、plyr、purrr、lubridate……如果作为R的使用者你说自己与Hadley无关,那几乎只有一种原因——你用着他写的包却不自知。
目前,出生于新西兰的Hadley是RStudio的首席科学家,也是奥克兰大学统计系的客座教授。也许很多人想象的Hadley会是一副秃顶老教授的模样,但现实生活中的Hadley却是潮的要命——你看到过打着两个耳钉的统计系教授吗?不信?见下图。
有
关采访者与采访内容
这段采访来自于DataCamp.com,采访者是Charlotte Wickham。等等——你是不是在开脑洞了?话说一开始听到采访者的这个名字我也以为是Hadley的老婆,没想到竟然是她的姐姐,而她的姐姐竟然也在大学里面担任统计系的教授!(为什么我突然想到了谢耳朵……)Charlotte在DataCamp.com上了一门教大家如何使用stringr包的课程(讲得很好,强烈推荐),而在这门课的最后,Charlotte自然近水楼台先得月,对stringr包的作者,也即自己弟弟的Hadley做了一番采访。
不同于Hadley在Youtube上的那些受访或演讲视频,由于采访者是自己的姐姐,Hadley特别放松,所以我们可以听到很多正式场合听不到的趣事。采访的内容不仅包括stringr包的开发趣事,还包括Hadley自述学习编程知识的经历、对于tidyverse的想法、还有对Python等语言的观点等。对于广大R爱好者来说,绝对是好奇心的一番巨大满足。
下面就是采访视频的截图:
关
于视频听译
虽然钱钟书先生说过“你吃了一个鸡蛋很好吃,为什么要认识生蛋的鸡呢?但是对于带着数不清的光环的Hadley ,我们很难压抑自己的好奇,“究竟是什么样的人可以开发出那么多著名的R包?”毕竟对于很多人而言,开发出其中的一个就可以在R圈扬名立万了。这种好奇也是驱使大猫观看并和大家分享的动力。
需要说明的是,视频全程没有任何中英文字幕,所以大猫只能用写博士论文的业余时间听译出来,速度虽然可能不够快,但是会尽量保证质量。
采
访节选:有关stringr
“
我们刚刚结束了stringr的教程,就让我们从这儿开始吧!你当时是怎么想着要去开发stringr的呢?
”
说起来也有趣,stringr是我教学中的副产品。当时我正在莱斯大学教统计系的课程,其中涉及到操作字符串(string manipulation)。我第一次上这门课的时候简直是噩梦——你需要记忆R中各种毫无规律的字符串函数名称,例如grep, grepl, regexpr, gregexpr……后来我有一次在洛杉矶旅行的时候突然有了个主意:为什么我不写个包把所有base R中的字符串函数打包呢?说干就干,我花了大概四个小时(!)写了这个包,把base R中的正则表达式函数全都用统一的名称给命名了一遍,它也就成了stringr的基础。很自然的,在第二次上这门课的时候,我就使用stringr教学生了。
“
你和stringi包的作者Marek Gagolewski (老毛子啊)之间处的怎么样?合作?还是竞争?(不怀好意脸)
”
(大笑)我想应该是合作吧。stringi是一个原创的包,包含了很多非常棒的C库(速度快),而stringr最初只是对于base R函数的一个打包。不过,(也许是看到stringr的统一命名法真的很有效)stringi复制了stringr的API。于是我想,为什么我不直接用stringr去打包(wrap)stringi呢?这样就可以避免两者在相同函数上的不同实现(implementation),大大方便广大使用者。所以显然,两者是合作的关系。
但毕竟两者还是有所不同的,stringr打包的是常用的字符串函数,没有stringi那么大而全。换句话说,如果你学会了stringr,那么你学stringi就很快了。
“
哈哈哈这个很重要,我们在以后上课的时候需要和学生讲清楚。
”
采
访节选:有关 stringr 和 tidyverse
“
我们都知道你的“tidyverse”工具库(Hadley开发的数据清洗工具库,包含了dplyr,stringr,ggplot2等很多著名的包)非常有名。你说stringr是其中的重要一环,应该怎么理解?
”
简而言之,这意味着stringr有着和tidyverse中其它包一样的开发规范(conventions)。你在使用其它tidyverse包的过程中也许已经接触了这些规范。我推崇这些规范,是因为他们真的在你的工作中起作用。就stringr而言,我认为以下两种这样的“规范”是最值得一提的。
首先是那个不可或缺的“下划线”——stringr所有函数都用有“str_”这个前缀。这样一来,你一眼就能看出哪些函数操作的是字符串,以及它们的目的。这在你的代码很多时尤其有用。
其次是“对象类型的一致性”(consistency of object type)。每个stringr函数全都把输入字符串作为“第一个”变量,而且返回特定类型的结果。我的哲学是:每个stringr都只做“一小件事”,如果要完成复杂的字符串处理,那么就把这些函数组合起来(大猫:这个思想在dplyr中甚至在SQL数据库中有着充分体现,好处能够让编程的学习更加容易,然而很不幸,同样是因为这个原因,导致dplyr的性能不如data.table,以后大猫会详述)。
stringr的开发远远早于pipe 符号(%>%),但是由于我坚持了“对象类型一致性”(把字符串永远放在第一个变量),stirngr和pipe符号可以完美结合。
大猫注:对象类型一致性不仅仅指“把重要变量永远放到第一个参数”,更多时候指“一个函数只可能返回一种类型的结果”。例如base R中的sapply就不是对象类型一致的,因为sapply会首先尝试返回一个向量,如果实在无法coerce成向量,那么就返回一个list;而 tidyver 库中有个叫做purrr的包,他有个函数叫 map_dbl,和sapply很像,区别就是map_dbl永远只返回double类型,如果结果不是double就报错,因此,map_dbl是“对象一致”的。“对象不一致的函数”在编程中往往特别“危险”,是个大坑,尤其特别需要提醒的是,base包的data.frame是对象不一致的,因为对他进行select操作,可能返回data.frame,也可能返回向量!对于程序员来说,这是无法忍受的。
采
访节选:tidy-verse or Hadley-verse?
“
tidyverse这个名字究竟是怎么来的?你一开始就有野心想要开发这样一个完整的数据挖掘工具库吗?还是这是个水到渠成的事?
(大猫:在英语中,verse有融会贯通、技艺高超的意思)
”
啊……额……哈哈哈哈我绝逼不可能事先有这么大的野心的啊!你知道他们一开始是怎么统称我开发的这些工具的吗?Hadley-verse!(羞涩脸)我可不希望让别人以为我是一个目中无人的人,所以我想最好的办法还是自己给这一整套R包生态系统取个名字。我考虑许多候选,tidy-verse就是其中之一。“tidy”这个词给人一种能够轻松高效处理数据的感觉,比较符合我的设计哲学。哎呀不管怎么样,取啥名字都比叫 Hadley-verse 要好!
“
你不觉得“tidy”这个词太讽刺了吗?因为现实生活中你并没有那么tidy啊!(采访者一副滑稽脸,满满姐姐嘲讽弟弟的既视感 Orz)
”
这个……啊哈哈哈哈你知道我的电脑永远是很tidy的嘛!
(未完待续)
下
期预告
下期是继续这次的采访节选?还是继续上上回的“R与编码”专题?嗯……看心情 ╮(╯╰)╭
领取专属 10元无门槛券
私享最新 技术干货