S语言介绍 Patrick Burns -- August 2002 什么是S? S是贝尔实验室几十年前作为研究方案开发的一种语言,它用于进行数据分析、统计建模、模拟和制图。概括起来说,它是一种全面的对象语言,具有很强的特征,其作用远不止于进行数据分析。 为什么要使用S语言? 简单地说,使用S语言的理由有以下3点: S不只是一个统计程序包,它是一种语言; S是设计用来解决正在思考问题的方法; S具有灵活而且强大的性能。 B作为一种语言的重要之处 尽管一个程序包和一种语言的区别很微妙,但这微妙的区别产生的效果却是非同凡响的。拥有一个程序包,你可以执行固定数量的任务,通常这些任务还提供各式各样的选项。而一种语言却允许你执行新的任务。 或许你会这样反驳:“但是我并不要求生成一个新的回归形式。”是,S语言允许你生成新的回归形式(并且有很多人从事这项工作),但是S还可以让你很容易地在你5组固定数据(或可能500组固定数据)上执行相同种类的回归。 关键在于提炼。你很容易会发现你所要做的5种回归是一样的——几乎没有不同的数据。在你的脑子里你已经提取了特殊的任务,从而使它们全部看上去相似。一旦你已经明白了提炼这个概念,那么讲授S的提炼就是一件容易的事情。语言都是关于提炼的东西。 我们思考的方式 S的一个得分点,也是我认为很成功的一点,就是它可以做成与人类思维的方式近似。一个简单的例子就是——假设我们认为重量是身高和腰围的函数,那么S的公式就可以表示为: 体重~身高+腰围 S的另外一个特征是它的向量导向功能——就是指对象通常被视为整体——就像人类总是趋向于考虑形势,而不是像个别数目的收集。假如我们需要对身高把英尺改成厘米作为单位,在S中的命令为: 这里height.inches是一个对象,它包括大量数目的身高,不仅仅是一个。S给用户隐藏了一系列的乘法,但表现出来的像是我们所思考的那样——英尺乘以2.54可以换算成厘米。 有C和Fortran经验的人会讽刺地认为较难有效使用S。这群人认为C比S优越,趋向于把问题归结为“编程”而不是自然地去考虑问题。 可移动的享受 S的机动性和性能。举例说明,我们很容易可以从S中调用C和Fortran的功能,S并不强调一切都是S编写的东西,所以你可以给你的特殊工作挑选最好的工具。 用S编写的代码通常对用户来讲是有利用价值的,所以任务中一个很小的变化通常只需要在代码中作小小的改变——这个改变只需要占用极少的时间。 首选的方案 给出了它的品质情况,S语言在统计学领域的很大一个部分里已成为首选的开发环境。当一种新的统计方法发明后,往往它会首先在S语言中得到体现。 1999年3月,John Chambers——贝尔实验室中S开发者之一,出席了ACM软件系统颁奖会议。会议表示:“S系统永远改变了人们分析、可视及操作数据的方式。”以前的获奖者包括Unix, TeX和the World-Wide Web。 S的风味 有两种途径可以拥有S: S-PLUS——一个商业版本,由Insightful公司出售; R——一个来自R Project的开放资源版本。 S-PLUS和R的不同之处 明显地一个区别就在于S-PLUS需要付费,而R是免费的。对于许多人来说,这将是一个肉眼看不到的决定因素。 在一个商业产品和一个免费产品之间做出决策,考虑的问题包括产品的质量、产品的幅度、文件系统以及支持情况。目前就我看来,S-PLUS和R在质量上都不可能支配对方。在某些方面,S-PLUS做得好/快一点,但另外一部分则是R要好/快一点;在幅度方面,目前S-PLUS可能拥有优势,S-PLUS明显地在文件系统方面具有支配权。 对两种产品支持的观点有一点复杂。两者的用户邮件列表都配置得很好。S-PLUS有S-news,你可以在S-news-request@wubio.wustl.edu[这个是自动生成的,你消息的主体应该是:subscribe s-news]上和S-PLUS签约,R拥有R-news,你可以通过R PROJECT进行签约;S-PLUS拥有一队的支持者,而R则有一个核心开发队伍加上一个愿意通过源代码进行挖掘的用户群体。总之,尽管有部分人会优先考虑,但S-PLUS和R两者的支持情况基本上持平, 大量的代码可以在两种系统下运行,尽管如此,在一些常用的有效功能上还是有一些不同之处。对于这两种语言的不同之处,R PROJECT上的R FAQ包含一个清楚而且详细的清单。 |