1.1为何要使用R? 5 口R是一个可进行交互式数据分析和探索的强大平台。其核心设计理念就是支持图1-1中所 概述的分析方法。举例来说,任意一一个分析步骤的结果均可被轻松保存、操作,并作为 进一步分析的输入。 口从多个数据源获取并将数据转化为可用的形式,可能是一个富有挑战性的议题。R可以轻 松地从各种类型的数据源导入数据,包括文本文件、数据库管理系统、统计软件,乃至 专门的数据仓库。它同样可以将数据输出并写入到这些系统中。 口R是一个无与伦比的平台,在其上可使用一种简单而直接的方式编写新的统计方法。它易 于扩展,并为快速编程实现新方法提供了一套十分自然的语言。 口R囊括了在其他软件中尚不可用的、先进的统计计算例程。事实上,新方法的更新速度是 以周来计算的。如果你是一位SAS用户,想象一下每隔几天就获得一个新SAS过程的情景。 口如果你不想学习一门新的语言,有各式各样的GUI(Graphical User Interface,图形用户界 面)工具通过菜单和对话框提供了与R语言同等的功能。 口R可运行于多种平台之上,包括Windows、UNIX和Mac OS X。这基本上意味着它可以运 行于你所能拥有的任何计算机上。(本人曾在偶然间看到过在Phone.上安装R的教程,让 人佩服,但这也许不是一个好主意。) 图1-2是展示R制图功能的一个示例。使用一行代码做出的这张图,说明了蓝领工作、白领工 作和专业工作在收入、受教育程度以及职业声望方面的关系。从专业角度讲,这是一幅使用不同 的颜色和符号表示不同分组的散点图矩阵,带有两类拟合曲线(线性回归和局部加权回归)、置 信椭圆以及两种对密度的展示(核密度估计和轴须图)。另外,在每个散点图中都自动标出了值 最大的离群点。如果这些术语对你来说很陌生也不必担心。我们将在后续各章中陆续谈及它们。 这里请暂且相信我,它们真的非常酷。(搞统计的人读到这里时估计已经垂诞三尺了。) 图1-2主要表明了以下几点。 口受教育程度(education)、收入(income)、入职业声望(prestige)呈线性相关。 口就总体而言,蓝领工作者有着更低的受教育程度、收入和职业声望;反之,专业工作者 有着更高的受教育程度、收入和职业声望。白领工作者介于两者之间。 口有趣的例外是,铁路工程师(RR.engineer)的受教育程度较低,但收入较高,而牧师 (minister)的职业声望高,收入却较低。 口受教育程度和职业声望(较轻微地)呈现双峰分布,高值和低值数据多于中间的数据。 第8章将会进一步讨论这类图形。重要的是,R能够让你以一种简单而直接的方式创建优雅、 信息丰富、高度定制化的图形。而使用其他统计语言创建类似的图形不仅费时费力,而且可能根 本无法做到。 可惜的是,R的学习曲线较为陡峭。因为它的功能非常丰富,所以文档和帮助文件也相当多。 另外,由于许多功能都是由独立贡献者编写的可选模块提供的,这些文档可能比较零散而且很难 找到。事实上,要掌握R的所有功能,可以说是一项挑战。 图灵社区会员matrixvirus(matrixvirus@163.com))专享尊重版权
1.1 为何要使用 R? 5 1 2 3 4 5 16 6 7 8 9 10 11 12 13 14 15 R是一个可进行交互式数据分析和探索的强大平台。其核心设计理念就是支持图1-1中所 概述的分析方法。举例来说,任意一个分析步骤的结果均可被轻松保存、操作,并作为 进一步分析的输入。 从多个数据源获取并将数据转化为可用的形式,可能是一个富有挑战性的议题。R可以轻 松地从各种类型的数据源导入数据,包括文本文件、数据库管理系统、统计软件,乃至 专门的数据仓库。它同样可以将数据输出并写入到这些系统中。 R是一个无与伦比的平台,在其上可使用一种简单而直接的方式编写新的统计方法。它易 于扩展,并为快速编程实现新方法提供了一套十分自然的语言。 R囊括了在其他软件中尚不可用的、先进的统计计算例程。事实上,新方法的更新速度是 以周来计算的。如果你是一位SAS用户,想象一下每隔几天就获得一个新SAS过程的情景。 如果你不想学习一门新的语言,有各式各样的GUI(Graphical User Interface,图形用户界 面)工具通过菜单和对话框提供了与R语言同等的功能。 R可运行于多种平台之上,包括Windows、UNIX和Mac OS X。这基本上意味着它可以运 行于你所能拥有的任何计算机上。(本人曾在偶然间看到过在iPhone上安装R的教程,让 人佩服,但这也许不是一个好主意。) 图1-2是展示R制图功能的一个示例。使用一行代码做出的这张图,说明了蓝领工作、白领工 作和专业工作在收入、受教育程度以及职业声望方面的关系。从专业角度讲,这是一幅使用不同 的颜色和符号表示不同分组的散点图矩阵,带有两类拟合曲线(线性回归和局部加权回归)、置 信椭圆以及两种对密度的展示(核密度估计和轴须图)。另外,在每个散点图中都自动标出了值 最大的离群点。如果这些术语对你来说很陌生也不必担心。我们将在后续各章中陆续谈及它们。 这里请暂且相信我,它们真的非常酷。(搞统计的人读到这里时估计已经垂涎三尺了。) 图1-2主要表明了以下几点。 受教育程度(education)、收入(income)、职业声望(prestige)呈线性相关。 就总体而言,蓝领工作者有着更低的受教育程度、收入和职业声望;反之,专业工作者 有着更高的受教育程度、收入和职业声望。白领工作者介于两者之间。 有趣的例外是,铁路工程师(RR.engineer)的受教育程度较低,但收入较高,而牧师 (minister)的职业声望高,收入却较低。 受教育程度和职业声望(较轻微地)呈现双峰分布,高值和低值数据多于中间的数据。 第8章将会进一步讨论这类图形。重要的是,R能够让你以一种简单而直接的方式创建优雅、 信息丰富、高度定制化的图形。而使用其他统计语言创建类似的图形不仅费时费力,而且可能根 本无法做到。 可惜的是,R的学习曲线较为陡峭。因为它的功能非常丰富,所以文档和帮助文件也相当多。 另外,由于许多功能都是由独立贡献者编写的可选模块提供的,这些文档可能比较零散而且很难 找到。事实上,要掌握R的所有功能,可以说是一项挑战。 图灵社区会员 matrixvirus(matrixvirus@163.com) 专享 尊重版权
6第1章R语言介绍 20406080100 ō铁路工程吭了 收入 △ 80 △△ 60 0 40 0 o bc △prof 牧师△ -20 WC mmmnm o 100 444 受教育程度 80 4 A 60 40 0 铁路竹程师。 20 0 100 △牧师 职业声望 8 80 。铁路工程师 60 + -40 6 -20 44L0 20 40 60 80 020.406080100 图1-2蓝领(bc)、白领(wc)、专业工作者(prof)的收入、受教育程度和职业声 望之间的关系。资料来源:John Fox编写的car包(函数scatterplot Matrix)。 使用其他统计编程语言很难绘制类似的图形,但在R中只需一到两行代码 本书的目标是让读者快速而轻松地学会使用R。我们将遍览R的许多功能,介绍到的内容足 以让你开始着手分析数据,并且在需要你深入了解的地方给出参考材料。下面我们从R的安装开 始学习。 1.2R的获取和安装 R可以在CRAN(Comprehensive R Archive Network )http:cran.r-project.org上免费下载,Linux、 Mac OS X和Windows都有相应编译好的二进制版本。根据你所选择平台的安装说明进行安装即 可。稍后我们将讨论如何通过安装称为包(package)的可选模块(同样可从CRAN下载)来增强 图灵社区会员matrixvirus(matrixvirus@163.com))专享尊重版权
6 第 1 章 R 语言介绍 图1-2 蓝领(bc)、白领(wc)、专业工作者(prof)的收入、受教育程度和职业声 望之间的关系。资料来源:John Fox编写的car包(函数scatterplot Matrix)。 使用其他统计编程语言很难绘制类似的图形,但在R中只需一到两行代码 本书的目标是让读者快速而轻松地学会使用R。我们将遍览R的许多功能,介绍到的内容足 以让你开始着手分析数据,并且在需要你深入了解的地方给出参考材料。下面我们从R的安装开 始学习。 1.2 R 的获取和安装 R可以在CRAN(Comprehensive R Archive Network)http://cran.r-project.org上免费下载。Linux、 Mac OS X和Windows都有相应编译好的二进制版本。根据你所选择平台的安装说明进行安装即 可。稍后我们将讨论如何通过安装称为包(package)的可选模块(同样可从CRAN下载)来增强 图灵社区会员 matrixvirus(matrixvirus@163.com) 专享 尊重版权
1.3R的使用 7 R的功能。附录H描述了如何对R进行版本升级。 1.3R的使用 R是一种区分大小写的解释型语言。你可以在命令提示符(>)后每次输入并执行一条命令, 或者一次性执行写在脚本文件中的一组命令。R中有多种数据类型,包括向量、矩阵、数据框(与 数据集类似)以及列表(各种对象的集合)。我们将在第2章中讨论这些数据类型。 R中的多数功能是由程序内置函数和用户自编函数提供的,一次交互式会话期间的所有数据 对象都被保存在内存中。一些基本函数是默认直接可用的,而其他高级函数则包含于按需加载的 程序包中。 R语句由函数和赋值构成。R使用<-,而不是传统的=作为赋值符号。例如,以下语句: ×<-rnorm(5) 创建了一个名为x的向量对象,它包含5个来自标准正态分布的随机偏差。 注意 R允许使用=为对象赋值。但是这样写的R程序并不多,因为它不是标准语法,某些情况 下,用等号赋值会出现问题,R程序员可能会因此取笑你。你还可以反转赋值方向。例如, rnorm(5)->x与上面的语句等价。重申一下,使用等号赋值的做法并不常见,在本书 中不推荐使用。 注释由符号#开头。在#之后出现的任何文本都会被R解释器忽略。 1.3.1新手上路 如果你使用的是Windows,.从开始菜单中启动R。在Mac上, 则需要双击应用程序文件夹中 的R图标。对于Liux,在终端窗口中的命令提示符下敲人R并回车。这些方式都可以启动R(R 界面参见图1-3)。 R Console (64-bit) ▣回X■ File Edit Misc Packages Windows Help R is tree software and comes with ABSOLUTELY NO WARRANTY You are welcome to redistribute it under certain conditions, Type 'license()'or 'licence()'for distribution details. Natural language support but running in an Engiish locale R is a collaborative project with many contributors. Type 'contributors()'for more information and citation()'on how to cite R or R packages in publications Type 'deno()for scme demos,thelp()for on-line help,or 'help.start ()for an HTML browser interface to help. Type 'q()'to quit R. (Previously saved workspace restored] 图1-3 Windows中的R界面 图灵社区会员matrixvirus(matrixvirus@163.com))专享尊重版权
1.3 R 的使用 7 1 2 3 4 5 16 6 7 8 9 10 11 12 13 14 15 R的功能。附录H描述了如何对R进行版本升级。 1.3 R 的使用 R是一种区分大小写的解释型语言。你可以在命令提示符(>)后每次输入并执行一条命令, 或者一次性执行写在脚本文件中的一组命令。R中有多种数据类型,包括向量、矩阵、数据框(与 数据集类似)以及列表(各种对象的集合)。我们将在第2章中讨论这些数据类型。 R中的多数功能是由程序内置函数和用户自编函数提供的,一次交互式会话期间的所有数据 对象都被保存在内存中。一些基本函数是默认直接可用的,而其他高级函数则包含于按需加载的 程序包中。 R语句由函数和赋值构成。R使用 <-,而不是传统的 = 作为赋值符号。例如,以下语句: 创建了一个名为x的向量对象,它包含5个来自标准正态分布的随机偏差。 注意 R允许使用=为对象赋值。但是这样写的R程序并不多,因为它不是标准语法,某些情况 下,用等号赋值会出现问题,R程序员可能会因此取笑你。你还可以反转赋值方向。例如, rnorm(5) -> x与上面的语句等价。重申一下,使用等号赋值的做法并不常见,在本书 中不推荐使用。 注释由符号 # 开头。在 # 之后出现的任何文本都会被R解释器忽略。 1.3.1 新手上路 如果你使用的是Windows,从开始菜单中启动R。在Mac上,则需要双击应用程序文件夹中 的R图标。对于Linux,在终端窗口中的命令提示符下敲入R并回车。这些方式都可以启动R(R 界面参见图1-3)。 图1-3 Windows中的R界面 图灵社区会员 matrixvirus(matrixvirus@163.com) 专享 尊重版权
8第1章R语言介绍 让我们通过一个简单的虚构示例来直观地感受一下这个界面。假设我们正在研究生理发育问 题,并收集了10名婴儿在出生后一年内的月龄和体重数据(见表1-1)。我们感兴趣的是体重的分 布及体重和月龄的关系。 表1-110名婴儿的月龄和体重 年龄(月) 体重(kg) 年龄(月) 体重(kg) 01 4.4 09 7.3 03 5.3 03 6.0 05 7.2 09 10.4 02 52 12 10.2 W 8.5 03 6.1 以上为虚构数据。 可以使用函数c()以向量的形式输入月龄和体重数据,此函数可将其参数组合成一个向量或 列表。然后用其他函数获得体重的均值和标准差,以及月龄和体重的相关度,最后用图形展示月 龄和体重的关系,这样就可以用可视化的方式检查其中可能存在的趋势。如代码清单1-1所示, 函数q()将结束会话并允许你退出R。 代码清单1-1一个R会话示例 >age<-c(1,3,5,2,11,9,3,9,12,3) >weight<-c(4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1) >mean〔weight) [1]7.06 sd(weight) 【112.077498 cor(age,weight) [1]0,9075655 plot(age,weight) >q(} 从代码清单1-1中可以看到,这10名婴儿的平均体重是7.06kg,标准差为2.08kg,月龄和体 重之间存在较强的线性关系(相关度=0.91)。这种关系也可以从图1-4所示的散点图中看到。不 出意料,随着月龄的增长,婴儿的体重也趋于增加。 散点图1-4的信息量充足,但略过“功利”,也不够美观。接下来的几章里,我们会讲到如何 自定义图形以契合需要。 小提示若想大致了解R能够作出何种图形,在命令行中运行demo(graphics)即可。生成的 部分图形如图l-5所示。其他的演示还有demo(Hershey)、demo(persp)和 demo(image)。要看到完整的演示列表,不加参数直接运行demo()即可。 图灵社区会员matrixvirus(matrixvirus@163.com))专享尊重版权
8 第 1 章 R 语言介绍 让我们通过一个简单的虚构示例来直观地感受一下这个界面。假设我们正在研究生理发育问 题,并收集了10名婴儿在出生后一年内的月龄和体重数据(见表1-1)。我们感兴趣的是体重的分 布及体重和月龄的关系。 表1-1 10名婴儿的月龄和体重 年龄(月) 体重(kg) 年龄(月) 体重(kg) 01 4.4 09 7.3 03 5.3 03 6.0 05 7.2 09 10.4 02 5.2 12 10.2 11 8.5 03 6.1 *以上为虚构数据。 可以使用函数c()以向量的形式输入月龄和体重数据,此函数可将其参数组合成一个向量或 列表。然后用其他函数获得体重的均值和标准差,以及月龄和体重的相关度,最后用图形展示月 龄和体重的关系,这样就可以用可视化的方式检查其中可能存在的趋势。如代码清单1-1所示, 函数q()将结束会话并允许你退出R。 代码清单1-1 一个R会话示例 从代码清单1-1中可以看到,这10名婴儿的平均体重是7.06 kg,标准差为2.08 kg,月龄和体 重之间存在较强的线性关系(相关度 = 0.91)。这种关系也可以从图1-4所示的散点图中看到。不 出意料,随着月龄的增长,婴儿的体重也趋于增加。 散点图1-4的信息量充足,但略过“功利”,也不够美观。接下来的几章里,我们会讲到如何 自定义图形以契合需要。 小提示 若想大致了解R能够作出何种图形,在命令行中运行demo(graphics)即可。生成的 部分图形如图 1-5 所示。其他的演示还有 demo(Hershey) 、 demo(persp) 和 demo(image)。要看到完整的演示列表,不加参数直接运行demo()即可。 图灵社区会员 matrixvirus(matrixvirus@163.com) 专享 尊重版权
1.3R的使用 9 0 10 9- 8 0 7- 6- 8 6 P 10 12 age 图1-4婴儿体重(千克)和年龄(月)的散点图 -Sine ty) 100 3m3m400 163101751013 1651701751035 -0 Nofched Borplots Distance Between Brownian Motions 4 T 90 Group 图1-5函数demo()绘制的图形示例 图灵社区会员matrixvirus(matrixvirus@163.com))专享尊重版权
1.3 R 的使用 9 1 2 3 4 5 16 6 7 8 9 10 11 12 13 14 15 图1-4 婴儿体重(千克)和年龄(月)的散点图 图1-5 函数demo()绘制的图形示例 图灵社区会员 matrixvirus(matrixvirus@163.com) 专享 尊重版权