Nature:与R语言一起探索未知的世界

 
      多年以来,遗传学家Helene Royo一直都使用商业化的计算机软件完成她的数据分析工作。她提取正在发育中的小鼠精子细胞的DNA进行试验分析,然后用一种名叫GeneSpring的软件对试验结果进行研究。“作为一名科学家,我希望对我正在开展的工作有一个全面的了解。但是这种软件分析满足不了我的需求,使用这种软件时我只能按按电脑键盘,最后得到一个结果而已。” Royo这样介绍道。Royo的主要工作是比较不同染色体的遗传活性(genetic activity),随着她的工作不断的深入,她逐渐意识到,商业化的计算机软件已经无法满足她在科研工作中对数据处理的需求了。

在Royo刚刚开始做博后的时候,她拿到了第一份基因组测序试验的结果,当时她面临一个选择,将这些数据交给相关的专家进行分析,或者是自己学着去分析这些数据。她选择了后者,开始学习如何使用免费的开源统计软件R来进行数据分析。在Royo供职的瑞士Friedrich Miescher生物医学研究所(Friedrich Miescher Institute for Biomedical Research in Basel, Switzerland)里,R软件已经被用于常规的数据统计工作。但是Royo跟随的却是一个更大的潮流,很多学术科研机构都在尝试摆脱商业化的数据分析软件,而R软件就是一个很好的选择。

R软件之所以如此受欢迎,除了因为它是免费软件之外,还有一个原因就是因为它能以不同的面目面对不同的使用者。首先,也是最重要的一点,需要用命令行形式进行输入的编程语言对于非程序员而言就是噩梦。但是R语言的初学者就可以越过这些复杂的编程步骤,使用预设的一套软件,这里面包含有各种统计分析命令和图形化的数据形式。这样一些预制的软件就在“黑匣子”般的商业化的软件与专业的程序员之间建起了一个中间地带。“R语言让一切都变得非常简单,能够满足我的所有需要。” Rojo评价道。

实际上,这也正是R语言的开发者在20世纪90年代开发这套工具时的初衷和设计。新西兰奥克兰大学(University of Auckland in New Zealand)的统计学家Ross Ihaka和 Robert Gentleman对计算机非常感兴趣,但是他们找不到能够满足他们需要的软件。于是他们决定自己开发一套软件,完成数据分析和统计的工作。他们将这套工具命名为R语言,有一部分原因是因为他们俩名字的第一个字母都是“R”,另外一部分原因是因为当时有一套非常流行的编程语言名叫“S”,所以他们取名“R”。

在互联网刚刚兴起的年代,R语言就迅速获得了全世界需要统计学软件,同时也愿意贡献自己想法的科学家的广泛关注。Ihaka和Gentleman决定向所有人免费开放R语言的源代码。很快,擅长写程序的科学家就利用R语言开发出了各种软件包和预设的程序,以满足各种不同的工作需要。据Gentleman介绍,他也可以为从事天文学研究的人写一套程序,但是如果是天文学家自己来写这套程序,那肯定会好用得多。

数学解决方案

Karline Soetaert是荷兰皇家海洋研究所(Royal Netherlands Institute for Sea Research in Yerseke)的一名海洋学家,她在2008年时想到要对Scheldt河河口里的浮游生物(zooplankton)的健康状况做一番了解。Soetaert想要沿着Scheldt河测算一下这些浮游生物的死亡速度,但是当时还没有相应的R语言软件可供她使用。为了解决这个问题,她与另外两名生态学家使用R语言开发了deSolve软件,这也是第一款使用R语言编写的,能够解微分方程(differential equations)的软件。“其他的软件也可以解决这个问题,但是都非常贵,而且都不是开源软件。” Soetaert着重强调道。现在,deSolve软件已经被广泛使用,比如流行病学家在构建感染性疾病模型时,遗传学家在研究基因调控网络问题时,新药研发人员在了解药物的药代动力学问题时都会用到deSolve软件。

2003年是R语言问世十周年的日子,当时科学家已经开发了200多款不同的R语言软件,而且也出现了第一批引用“R项目(R Project)”的文献。到今天为止,已经诞生了6000多个R语言软件包,可以用来解决各种各样、遍布各个科研领域的问题。其中有些软件,比如Bioconductor(参见go.nature.com/s7mq39)能够帮助科研人员对人类基因组与荷兰人基因组(Neanderthal genome)进行比对;有些软件,比如IPMpack(参见go.nature.com/cyhons)能够对种群增长(population growth)进行建模;有些软件,比如quantmod(参见go.nature.com/jxqasm)能够帮助科研人员预测产权价格(equity prices);还有些软件,比如ggplot2(参见ggplot2.org)能够帮助科研人员使用漂亮的图片将数据结果展示出来。专业人士还能够利用R语言,比如knitr(http://yihui.name/knitr)写出底稿,将原始的数据至于其中,供读者使用。去年在Elsevier出版社的Scopus数据库中,平均在每100篇专业文献当中就大约有1篇文献用到了R语言,或者R语言相关软件,在农业科学和环境科学相关文献中,这个比例会更高,详见附图“R语言的快速上涨趋势”。

R语言使用小贴士

*可以在R的网站CRAN (Comprehensive R Archive Network)http://cran.r-project.org上安装R语言。这里提供了关于这个系统的介绍: go.nature.com/jh9jb8。

*很多科研人员都建议使用功能强大的、免费的交互式软件RStudio,详见www.rstudio.com。

*有很多在线学习教程,比如DataCamp (go.nature.com/qndp6w), rOpenSci (ropensci.org), Software Carpentry (go.nature.com/wg3s9u)和R-bloggers (www.r-bloggers.com)。

*到go.nature.com/zrhdkj网页上浏览本文的在线版,获取更多R语言软件包信息。

统计学威力

对于很多使用者而言,R语言作为一种统计学软件是非常优秀的。美国田纳西大学(University of Tennessee in Knoxville)的统计学家Robert Muenchen对各种统计学软件都做过分析,他认为,R语言在统计学方面的功力与SPSS或SAS这些专业化的统计学软件不相上下。近十年来,R语言不仅跟上了统计学软件市场的领头羊,甚至已经取代了它们的地位。据Muenchen介绍,R语言非常有可能在今年夏天的时候成为头号统计学软件。

Bioconductor软件也是一款基于R语言开发的软件,主要应用于基因组学研究领域和分子生物学研究领域。Bioconductor软件能够帮助科研人员对海量的遗传序列数据进行处理和比较,对Gene Expression Omnibus等数据库进行检索,或者将数据上传到数据库当中等。该软件包含1000多个软件包,其中有一些软件还可以将数百万个由新一代DNA测序仪产出的DNA片段与已注释基因一一对应起来。

在深入学习R语言的过程中,Royo也在Friedrich Miescher研究所生物信息学组的组长——Michael Stadler的指导下接受了强化训练。Royo花了大约半年来钻研R语言和Bioconductor软件。但是美国加利福尼亚州伯克利数据科学研究所(Berkeley Institute for Data Science in California)的生态学家,rOpenSci组织(该组织旨在帮助科研人员接受并使用R语言,促进R语言的发展)的创始人Karthik Ram认为,还有更多的学习机会。Ram等人会针对科研人员的问题免费教授R语言课程,没有任何编程技巧的人都可以学习。

美国圣地亚哥州立大学(San Diego State University in California)的生态学家Megan Jennings就接受了Ram等人的培训。Jennings跟踪山猫(bobcats)、美洲狮(mountain lions)和其他野生动物,了解它们的运动情况。用了将近一年的时间,使用了36台摄像机,拍摄了40多万张照片,Jennings希望能够在一年的某一个时间跟踪某个动物的活动情况。一开始,Jennings决定用人工挑选照片,并且使用PRESENCE软件处理的方法来完成这项任务。后来在Ram的帮助下,Jennings自己写了一个R语言程序,能够自动识别带标记的照片,并将照片提纯,然后将特定的数据输送给另外一个R语言建模工具。“我以前要花一个小时才能完成的工作,现在只需要5分钟就搞定了。” Jennings介绍道。

R语言最大的优势就是它的在线支持能力。据Muenchen介绍,在统计学论坛中,与R语言相关的问题在所有商业化的统计软件当中名列第一。

“我们经常能够看到,有人在论坛上发出了一个提问贴,不到半个小时,相关软件的开发者就会出来回答这个问题。” Muenchen介绍道。这种快速反应能力就是从事基础科研工作的科学家最关注的。Royo还指出,她几乎能够在网上找到任何问题的答案。Royo现在基本上已经能够完成她所有的数据处理和分析工作,同时也给很多同事提供了大量的帮助。“不过我每天也都会在谷歌上寻找答案。” Royo说道。学习R语言不仅教会了Royo编程技巧,同时也让她能够对其他科学家的统计工作有更加深刻的认识。

据Ram介绍,虽然并不是每一位科学家都热衷于学习R语言编程技巧,但是与Python等语言(更不要说Perl或C语言了)相比,R语言还是要容易多了。据Muenchen介绍,会有越来越多的科研人员乐于接受用户友好式的软件,而非学习一门编程语言。比如与Royo一样,遗传学家Rabih Murr在博后期间也学习了同一门R语言课程,但是他并没有花那么多的时间去好好做练习。Murr认为,学习R语言,并且能够用R语言解决相应的科学问题也需要下一番功夫,他表示,这是一个按照重要性先后排序的问题。但是自从Murr今年当上了瑞士日内瓦大学(University of Geneva in Switzerland)实验室主任之后,他也打算雇一个有过R语言开发经验的员工了。

与其他的技能一样,学习R语言编程也并非一日之功。但是Jennings认为投入产出比是非常高的。她说道:“这就好比投资,现在花一番功夫,就能够为日后的工作节省时间,而且还能够学到一门非常有用的新技能,能够解决我们科学家经常会碰到的各种问题。”

原文检索:Programming tools: Adventures with R