新書推薦:
《
古典的回響:溪客舊廬藏明清文人繪畫
》
售價:HK$
437.8
《
根源、制度和秩序:从老子到黄老学(王中江著作系列)
》
售價:HK$
121.0
《
索恩丛书·北宋政治与保守主义:司马光的从政与思想(1019~1086)
》
售價:HK$
75.9
《
掌故家的心事
》
售價:HK$
85.8
《
农为邦本——农业历史与传统中国
》
售價:HK$
74.8
《
郊庙之外:隋唐国家祭祀与宗教 增订版 (三联·哈佛燕京学术丛书)
》
售價:HK$
105.6
《
小麦文明:“黄金石油”争夺战
》
售價:HK$
97.9
《
悬壶杂记全集:老中医多年临证经验总结(套装3册) 中医医案诊疗思路和处方药应用
》
售價:HK$
135.1
編輯推薦:
学懂分析,玩转大数据,用R轻松实现数据可视化。从实际数据分析出发,全面掌握R编程
內容簡介:
R是一个开源项目,具有强大的统计计算及制图能力,是从大数据中获取有用信息的绝佳工具,在各种主流操作系统上都可以安装使用,其基本安装就提供了数以百计的数据管理、统计和图形函数。另外,社区开发的数以千计的扩展包为R增加了更多强大功能。《R语言实战》注重实用性,是一本全面而细致的R指南,高度概括了该软件和它的强大功能,展示了实用的统计示例,且对于难以用传统方法处理的凌乱、不完整和非正态的数据给出了优雅的处理方法。作者不仅仅探讨统计分析,还阐述了大量探索和展示数据的图形功能。《R语言实战》适合数据分析人员及R用户学习参考。
關於作者:
Robert I. Kabacoff
R语言社区著名学习网站Quick-Rhttp:www.statmethods.net)的幕后维护者,现为全球化开发与咨询公司Management研究集团研发副总裁。此前,Kabacoff博士是佛罗里达诺瓦东南大学的教授,讲授定量方法和统计编程的研究生课程。Kabacoff还是临床心理学博士、统计顾问,擅长数据分析,在健康、金融服务、制造业、行为科学、政府和学术界有20余年的研究和统计咨询经验。
目錄 :
目 录
第一部分 入门
第1章 R语言介绍
1.1 为何要使用R?
1.2 R的获取和安装
1.3 R的使用
1.3.1 新手上路
1.3.2 获取帮助
1.3.3 工作空间
1.3.4 输入和输出
1.4 包
1.4.1 什么是包
1.4.2 包的安装
1.4.3 包的载入
1.4.4 包的使用方法
1.5 批处理
1.6 将输出用为输入——结果的重用
1.7 处理大数据集
1.8 示例实践
1.9 小结
第2章 创建数据集
2.1 数据集的概念
2.2 数据结构
2.2.1 向量
2.2.2 矩阵
2.2.3 数组
2.2.4 数据框
2.2.5 因子
2.2.6 列表
2.3 数据的输入
2.3.1 使用键盘输入数据
2.3.2 从带分隔符的文本文件导入数据
2.3.3 导入Excel数据
2.3.4 导入XML数据
2.3.5 从网页抓取数据
2.3.6 导入SPSS数据
2.3.7 导入SAS数据
2.3.8 导入Stata数据
2.3.9 导入netCDF数据
2.3.10 导入HDF5数据
2.3.11 访问数据库管理系统
2.3.12 通过StatTransfer导入数据
2.4 数据集的标注
2.4.1 变量标签
2.4.2 值标签
2.5 处理数据对象的实用函数
2.6 小结
第3章 图形初阶
3.1 使用图形
3.2 一个简单的例子
3.3 图形参数
3.3.1 符号和线条
3.3.2 颜色
3.3.3 文本属性
3.3.4 图形尺寸与边界尺寸
3.4 添加文本、自定义坐标轴和图例
3.4.1 标题
3.4.2 坐标轴
3.4.3 参考线
3.4.4 图例
3.4.5 文本标注
3.5 图形的组合
3.6 小结
第4章 基本数据管理
4.1 一个示例
4.2 创建新变量
4.3 变量的重编码
4.4 变量的重命名
4.5 缺失值
4.5.1 重编码某些值为缺失值
4.5.2 在分析中排除缺失值
4.6 日期值
4.6.1 将日期转换为字符型变量
4.6.2 更进一步
4.7 类型转换
4.8 数据排序
4.9 数据集的合并
4.9.1 添加列
4.9.2 添加行
4.10 数据集取子集
4.10.1 选入保留变量
4.10.2 剔除丢弃变量
4.10.3 选入观测
4.10.4 subset函数
4.10.5 随机抽样
4.11 使用SQL语句操作数据框
4.12 小结
第5章 高级数据管理
5.1 一个数据处理难题
5.2 数值和字符处理函数
5.2.1 数学函数
5.2.2 统计函数
5.2.3 概率函数
5.2.4 字符处理函数
5.2.5 其他实用函数
5.2.6 将函数应用于矩阵和数据框
5.3 数据处理难题的一套解决方案
5.4 控制流
5.4.1 重复和循环
5.4.2 条件执行
5.5 用户自编函数
5.6 整合与重构
5.6.1 转置
5.6.2 整合数据
5.6.3 reshape包
5.7 小结
第二部分 基本方法
第6章 基本图形
6.1 条形图
6.1.1 简单的条形图
6.1.2 堆砌条形图和分组条形图
6.1.3 均值条形图
6.1.4 条形图的微调
6.1.5 棘状图
6.2 饼图
6.3 直方图
6.4 核密度图
6.5 箱线图
6.5.1 使用并列箱线图进行跨组比较
6.5.2 小提琴图
6.6 点图
6.7 小结
第7章 基本统计分析
7.1 描述性统计分析
7.1.1 方法云集
7.1.2 分组计算描述性统计量
7.1.3 结果的可视化
7.2 频数表和列联表
7.2.1 生成频数表
7.2.2 独立性检验
7.2.3 相关性的度量
7.2.4 结果的可视化
7.2.5 将表转换为扁平格式
7.3 相关
7.3.1 相关的类型
7.3.2 相关性的显著性检验
7.3.3 相关关系的可视化
7.4 t检验
7.4.1 独立样本的t检验
7.4.2 非独立样本的t检验
7.4.3 多于两组的情况
7.5 组间差异的非参数检验
7.5.1 两组的比较
7.5.2 多于两组的比较
7.6 组间差异的可视化
7.7 小结
第三部分 中级方法
第8章 回归
8.1 回归的多面性
8.1.1 OLS回归的适用情境
8.1.2 基础回顾
8.2 OLS回归
8.2.1 用lm拟合回归模型
8.2.2 简单线性回归
8.2.3 多项式回归
8.2.4 多元线性回归
8.2.5 有交互项的多元线性回归
8.3 回归诊断
8.3.1 标准方法
8.3.2 改进的方法
8.3.3 线性模型假设的综合验证
8.3.4 多重共线性
8.4 异常观测值
8.4.1 离群点
8.4.2 高杠杆值点
8.4.3 强影响点
8.5 改进措施
8.5.1 删除观测点
8.5.2 变量变换
8.5.3 增删变量
8.5.4 尝试其他方法
8.6 选择“最佳”的回归模型
8.6.1 模型比较
8.6.2 变量选择
8.7 深层次分析
8.7.1 交叉验证
8.7.2 相对重要性
8.8 小结
第9章 方差分析
9.1 术语速成
9.2 ANOVA模型拟合
9.2.1 aov函数
9.2.2 表达式中各项的顺序
9.3 单因素方差分析
9.3.1 多重比较
9.3.2 评估检验的假设条件
9.4 单因素协方差分析
9.4.1 评估检验的假设条件
9.4.2 结果可视化
9.5 双因素方差分析
9.6 重复测量方差分析
9.7 多元方差分析
9.7.1 评估假设检验
9.7.2 稳健多元方差分析
9.8 用回归来做ANOVA
9.9 小结
第10章 功效分析
10.1 假设检验速览
10.2 用pwr包做功效分析
10.2.1 t检验
10.2.2 方差分析
10.2.3 相关性
10.2.4 线性模型
10.2.5 比例检验
10.2.6 卡方检验
10.2.7 在新情况中选择合适的效应值
10.3 绘制功效分析图形
10.4 其他软件包
10.5 小结
第11章 中级绘图
11.1 散点图
11.1.1 散点图矩阵
11.1.2 高密度散点图
11.1.3 三维散点图
11.1.4 气泡图
11.2 折线图
11.3 相关图
11.4 马赛克图
11.5 小结
第12章 重抽样与自助法
12.1 置换检验
12.2 用coin包做置换检验
12.2.1 独立两样本和K样本检验
12.2.2 列联表中的独立性
12.2.3 数值变量间的独立性
12.2.4 两样本和K样本相关性检验
12.2.5 深入探究
12.3 lmPerm包的置换检验
12.3.1 简单回归和多项式回归
12.3.2 多元回归
12.3.3 单因素方差分析和协方差分析
12.3.4 双因素方差分析
12.4 置换检验点评
12.5 自助法
12.6 boot包中的自助法
12.6.1 对单个统计量使用自助法
12.6.2 多个统计量的自助法
12.7 小结
第四部分 高级方法
第13章 广义线性模型
13.1 广义线性模型和glm函数
13.1.1 glm函数
13.1.2 连用的函数
13.1.3 模型拟合和回归诊断
13.2 Logistic回归
13.2.1 解释模型参数
13.2.2 评价预测变量对结果概率的影响
13.2.3 过度离势
13.2.4 扩展
13.3 泊松回归
13.3.1 解释模型参数
13.3.2 过度离势
13.3.3 扩展
13.4 小结
第14章 主成分和因子分析
14.1 R中的主成分和因子分析
14.2 主成分分析
14.2.1 判断主成分的个数
14.2.2 提取主成分
14.2.3 主成分旋转
14.2.4 获取主成分得分
14.3 探索性因子分析
14.3.1 判断需提取的公共因子数
14.3.2 提取公共因子
14.3.3 因子旋转
14.3.4 因子得分
14.3.5 其他与EFA相关的包
14.4 其他潜变量模型
14.5 小结
第15章 处理缺失数据的高级方法
15.1 处理缺失值的步骤
15.2 识别缺失值
15.3 探索缺失值模式
15.3.1 列表显示缺失值
15.3.2 图形探究缺失数据
15.3.3 用相关性探索缺失值
15.4 理解缺失数据的来由和影响
15.5 理性处理不完整数据
15.6 完整实例分析行删除
15.7 多重插补
15.8 处理缺失值的其他方法
15.8.1 成对删除
15.8.2 简单非随机插补
15.9 小结
第16章 高级图形进阶
16.1 R中的四种图形系统
16.2 lattice包
16.2.1 条件变量
16.2.2 面板函数
16.2.3 分组变量
16.2.4 图形参数
16.2.5 页面摆放
16.3 ggplot2包
16.4 交互式图形
16.4.1 与图形交互:鉴别点
16.4.2 playwith
16.4.3 latticist
16.4.4 iplots包的交互图形
16.4.5 rggobi
16.5 小结
后记:探索R的世界
附录A 图形用户界面
附录B 自定义启动环境
附录C 从R中导出数据
附录D 制作出版级品质的输出
附录E R中的矩阵运算
附录F 本书中用到的扩展包
附录G 处理大数据
附录H 更新R
参考文献
內容試閱 :
那些年,我们一起学过的R语言
公元前
2007年上半年的一天,一堆做基因组序列分析的代码让我认识了R语言。那是一份高质量的R代码,各种标准的向量化操作、匿名函数、优美的代码格式让我欣喜,也让我茫然。同年暑假,有幸到清华大学学习,刘军老师布置下来的作业是用HMM模型预测蛋白质二级结构。我壮着胆子,硬着头皮,以C语言的风格用R语言完成了作业(各种循环,各种丑陋的标量)。
那些年,R语言所有的参考资料就是官方的几本手册,但庆幸的是,还有丁国徽博士翻译的中文版。
公元纪年开始
2008年的初冬,北京市海淀区中国人民大学的一间阶梯教室内,举办了一场小众、既不太学术技术档次也不高的会议。教室外的墙上挂着一条横幅,上书“第一届中国R语言会议”。这算是R语言在国内发展历程中的一个里程碑。100多人参加了为期一天多的会议。参加那次会议的人不少都成为了现在中国R语言社区最活跃的人,比如谢益辉、刘思喆、李舰、张翔、魏太云、陈堰平等人。当然,其中也有当时就已经算是R语言社区元老的吴喜之老师和丁国徽博士。
没记错的话,当时出席会议的还有机械工业出版社的编辑。因为作为会议的承办机构,统计之都社区(http:cos.name)的骨干们已经想通过出版一本高质量R语言书来推动R语言在中国的发展,而出版界也已经开始注意到这个小众市场。那时候,大部分R语言书籍来自学术界。水平高深莫测的专家教授们,乃至R语言的发明人
Robert C. Gentleman
大叔写出来的书,都让我这种初窥门径的人越看越糊涂。同时,中文的R语言书籍也开始出现,但都只是将R语言作为某个特定领域(比如生物信息学)的数据分析工具。
文艺复兴
会议举办了,人也都混了个脸熟,但R语言在国内的发展依旧不温不火。直到2011年,大数据突然火了起来,R语言一举杀进编程语言排行榜前20名。刘思喆同学在“码农”界主流媒体《程序员》上的文章,让R语言一下子走到了很多人面前。大家发现,这个经常被描述成统计编程语言的东西并不是仅仅擅长统计,其底层融合CC++Fortran等各种语言的优势、层出不穷的新模型、日趋成熟的开发设施,再加上它跟Hadoop、多核计算、MPI等高性能计算技术的迅速结合,让人们看到了它在大数据时代的潜力。
O’Reilly、Manning等技术图书出版商迅速跟进。与以往的学术出版社不同,它们的加入让R语言书籍更容易被普通读者接受,也迅速降低了R语言的门槛。
你现在翻开的这本书,就是由业内大名鼎鼎的Quick-R网站(http:www.statmethods.net)的创始人Robert
I.
Kabacoff撰写并由Manning出版的。全书分为四部分,由浅入深地介绍了R语言本身,以及如何用R语言实现或简单或复杂的数据分析和绘图。而书后8个附录中关于大数据分析、自定义启动环境、图形界面等方面的内容,有一些早已被志愿者翻译成中文在互联网上广泛流传。本书内容质量之高,权威性之强,由此可见一斑,足以帮读者快速地走过我曾经历过的迷茫。
结束公元纪年
这本书的翻译工作开始的时候我还在学校读书,实验室里有两三个人在使用R语言做数据分析,为发表论文而努力。现在,我坐在公司的工位上,周围的每个人都或多或少在使用R。整个研发部门一千多人,多半每天都会用到R语言。R语言已经是新员工技术培训的必修内容。
若干天前,同事们在讨论中描绘出一个宏大的愿景:用高效的数据分析手段,建立起海量生物实验数据到所有生物表型的预测模型。如果成功,这将结束公元纪年。这个愿景的核心不是新的生物实验技术,也不是如何采集样本,而是数据分析。
有点画大饼的意思了,就此打住。让我们翻开这本书,或许,公元纪年真的能在我们手中结束。
——陈钢
2012年9月4日夜于深圳华大基因研究院
R语言介绍
本章内容
R的安装
熟悉R语言
运行R程序
我们分析数据的方式在近年来发生了令人瞩目的变化。随着个人电脑和互联网的出现,可获取的数据量有了非常可观的增长。商业公司拥有TB级的客户交易数据,政府、学术团体以及私立研究机构同样拥有各类研究课题的大量档案和调查数据。从这些海量数据中收集信息(更不用说发现规律)已经成为了一项产业。同时,如何以容易让人理解和消化的方式呈现这些信息也日益富有挑战性。
数据分析科学(统计学、计量心理学、计量经济学、机器学习)的发展一直与数据的爆炸式增长保持同步。远在个人电脑和互联网发端之前,学术研究人员就已经开发出了很多新的统计方法,并将其研究成果以论文的形式发表在专业期刊上。这些方法可能需要很多年才能够被程序员改写并整合到广泛用于数据分析的统计软件中。而如今,新的方法层出不穷。统计研究者经常在人们常访问的网站上发表新方法和改进的方法,并附上相应的实现代码。
个人电脑的出现还对我们分析数据的方式产生了另外一种影响。当数据分析需要在大型机上完成的时候,机时非常宝贵难求。分析师们会小心地设定可能用到的所有参数和选项,再让计算机执行计算。程序运行完毕后,输出的结果可能长达几十甚至几百页。之后,分析师会仔细筛查整个输出,去芜存菁。许多受欢迎的统计软件正是在这个时期开发出来的。直到现在,统计软件依然在一定程度上沿袭了这种处理方式。
随着个人电脑将计算变得廉价且便捷,现代数据分析的方式发生了变化。与过去一次性设置好完整的数据分析过程不同,现在这个过程已经变得高度交互化,每一阶段的输出都可以充当下一阶段的输入。一个典型的数据分析过程的示例见图1-1。在任何时刻,这个循环都可能在进行着数据变换、缺失值插补、变量增加或删除,甚至重新执行整个过程。当分析师认为他已经深入地理解了数据,并且可以回答所有能够回答的相关问题时,这个过程即告结束。
个人电脑的出现(特别是高分辨率显示器的普及)同样对理解和呈现分析结果产生了重大影响。一图胜千言,绝对如此!人类非常擅长通过视觉获取有用信息。现代数据分析也日益依赖通过呈现图形来揭示含义和表达结果。
图1-1 典型的数据分析步骤
总而言之,今天的数据分析人士需要从广泛的数据源(数据库管理系统、文本文件、统计软件以及电子表格)获取数据、将数据片段融合到一起、对数据做清理和标注、用最新的方法进行分析、以有意义有吸引力的图形化方式展示结果,最后将结果整合成令人感兴趣的报告并向利益相关者和公众发布。通过下面的介绍你会看到,R正是一个适合完成以上目标的理想而又功能全面的软件。
1.1 为何要使用R?
与起源于贝尔实验室的S语言类似,R也是一种为统计计算和绘图而生的语言和环境,它是一套开源的数据分析解决方案,由一个庞大且活跃的全球性研究型社区维护。但是,市面上也有许多其他流行的统计和制图软件,如Microsoft
Excel、SAS、IBM SPSS、Stata以及Minitab。为何偏偏要选择R?
R有着非常多值得推荐的特性。
多数商业统计软件价格不菲,投入成千上万美元都是可能的。而R是免费的!如果你是一位教师或一名学生,好处显而易见。
R是一个全面的统计研究平台,提供了各式各样的数据分析技术。几乎任何类型的数据分析工作皆可在R中完成。
R拥有顶尖水准的制图功能。如果希望复杂数据可视化,那么R拥有最全面且最强大的一系列可用功能。
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的所有功能,可以说是一项挑战。
图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下载)来增强R的功能。附录H描述了如何对R进行版本升级。
1.3 R的使用
R是一种区分大小写的解释型语言。你可以在命令提示符()后每次输入并执行一条命令,或者一次性执行写在脚本文件中的一组命令。R中有多种数据类型,包括向量、矩阵、数据框(与数据集类似)以及列表(各种对象的集合)。我们将在第2章中讨论这些数据类型。
R中的多数功能是由程序内置函数和用户自编函数提供的,一次交互式会话期间的所有数据对象都被保存在内存中。一些基本函数是默认直接可用的,而其他高级函数则包含于按需加载的程序包中。
R语句由函数和赋值构成。R使用 -,而不是传统的 = 作为赋值符号。例如,以下语句:
创建了一个名为x的向量对象,它包含5个来自标准正态分布的随机偏差。
注意 R允许使用=为对象赋值。但是这样写的R程序并不多,因为它不是标准语法,某些情况下,用等号赋值会出现问题,R程序员可能会因此取笑你。你还可以反转赋值方向。例如,rnorm5
- x与上面的语句等价。重申一下,使用等号赋值的做法并不常见,在本书中不推荐使用。
注释由符号 # 开头。在 # 之后出现的任何文本都会被R解释器忽略。
1.3.1 新手上路
如果你使用的是Windows,从开始菜单中启动R。在Mac上,则需要双击应用程序文件夹中的R图标。对于Linux,在终端窗口中的命令提示符下敲入R并回车。这些方式都可以启动R(R界面参见图1-3)。
图1-3 Windows中的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能够作出何种图形,在命令行中运行demographics即可。生成的
部分图形如图1-5所示。其他的演示还有demoHershey、demopersp和demoimage。要看到完整的演示列表,不加参数直接运行demo即可。
图1-4 婴儿体重(千克)和年龄(月)的散点图
图1-5 函数demo绘制的图形示例
1.3.2 获取帮助
R提供了大量的帮助功能,学会如何使用这些帮助文档可以在相当程度上助力你的编程工作。R的内置帮助系统提供了当前已安装包中所有函数的细节、参考文献以及使用示例。帮助文档可以通过表1-2中列出的函数进行查看。
表1-2 R中的帮助函数
函数 功能
help.start 打开帮助文档首页
help"foo"或?foo 查看函数foo的帮助(引号可以省略)
help.search"foo"或??foo 以foo为关键词搜索本地帮助文档
example"foo" 函数foo的使用示例(引号可以省略)
RSiteSearch"foo" 以foo为关键词搜索在线文档和邮件列表存档
apropos"foo", mode="function" 列出名称中含有foo的所有可用函数
data 列出当前已加载包中所含的所有可用示例数据集
vignette 列出当前已安装包中所有可用的vignette文档
vignette"foo" 为主题foo显示指定的vignette文档
函数help.start会打开一个浏览器窗口,我们可在其中查看入门和高级的帮助手册、常见问题集,以及参考材料。函数RSiteSearch可在在线帮助手册和R-Help邮件列表的讨论存档中搜索指定主题,并在浏览器中返回结果。由函数vignette函数返回的vignette文档一般是PDF格式的实用介绍性文章。不过,并非所有的包都提供了vignette文档。不难发现,R提供了大量的帮助功能,学会如何使用这些帮助文档,毫无疑问地会有助于编程。我经常会使用?来查看某些函数的功能(如选项或返回值)。
1.3.3 工作空间
工作空间(workspace)就是当前R的工作环境,它储存着所有用户定义的对象(向量、矩阵、函数、数据框、列表)。在一个R会话结束时,你可以将当前工作空间保存到一个镜像中,并在下次启动R时自动载入它。各种命令可在R命令行中交互式地输入。使用上下方向键查看已输入命令的历史记录。这样我们就可以选择一个之前输入过的命令并适当修改,最后按回车重新执行它。
当前的工作目录(working
directory)是R用来读取文件和保存结果的默认目录。我们可以使用函数getwd来查看当前的工作目录,或使用函数setwd设定当前的工作目录。如果需要读入一个不在当前工作目录下的文件,则需在调用语句中写明完整的路径。记得使用引号闭合这些目录名和文件名。
用于管理工作空间的部分标准命令见表1-3。
表1-3 用于管理R工作空间的函数
函数 功能
getwd 显示当前的工作目录
setwd"mydirectory" 修改当前的工作目录为mydirectory
ls 列出当前工作空间中的对象
rmobjectlist 移除(删除)一个或多个对象
helpoptions 显示可用选项的说明
options 显示或设置当前选项
history# 显示最近使用过的#个命令(默认值为25)
savehistory"myfile" 保存命令历史到文件myfile中(默认值为.Rhistory)
loadhistory"myfile" 载入一个命令历史文件(默认值为.Rhistory)
save.image"myfile" 保存工作空间到文件myfile中(默认值为.RData)
saveobjectlist, file="myfile" 保存指定对象到一个文件中
load"myfile" 读取一个工作空间到当前会话中(默认值为.RData)
q 退出R。将会询问你是否保存工作空间
要了解这些命令是如何运作的,运行代码清单1-2中的代码并查看结果。
代码清单1-2 用于管理R工作空间的命令使用示例
首先,当前工作目录被设置为C:myprojectsproject1,当前的选项设置情况将显示出来,而数字将被格式化,显示为具有小数点后三位有效数字的格式。然后,我们创建了一个包含20个均匀分布随机变量的向量,生成了此数据的摘要统计量和直方图。最后,命令的历史记录保存到文件.Rhistory中,工作空间(包含向量x)保存到文件.RData中,会话结束。
注意setwd命令的路径中使用了正斜杠。R将反斜杠(\)作为一个转义符。即使在Windows平台上运行R,在路径中也要使用正斜杠。同时注意,函数setwd不会自动创建一个不存在的目录。如果必要的话,可以使用函数dir.create来创建新目录,然后使用setwd将工作目录指向这个新目录。
在独立的目录中保存项目是一个好主意。我通常会在启动一个R会话时使用setwd命令指定到某一个项目的路径,后接不加选项的load命令。这样做可以让我从上一次会话结束的地方重新开始,并保证各个项目之间的数据和设置互不干扰。在Windows和Mac
OS
X平台上就更简单了。跳转到项目所在目录并双击保存的镜像文件即可。这样做可以启动R,载入保存的工作空间,并设置当前工作目录到这个文件夹中。
1.3.4 输入和输出
启动R后将默认开始一个交互式的会话,从键盘接受输入并从屏幕进行输出。不过你也可以处理写在一个脚本文件(一个包含了R语句的文件)中的命令集并直接将结果输出到多类目标中。
1. 输入
函数source"filename"可在当前会话中执行一个脚本。如果文件名中不包含路径,R将假设此脚本在当前工作目录中。举例来说,source"myscript.R"将执行包含在文件myscript.R中的R语句集合。依照惯例,脚本文件以.R作为扩展名,不过这并不是必需的。
2. 文本输出
函数sink"filename"将输出重定向到文件filename中。默认情况下,如果文件已经存在,则它的内容将被覆盖。使用参数append=TRUE可以将文本追加到文件后,而不是覆盖它。参数split=TRUE可将输出同时发送到屏幕和输出文件中。不加参数调用命令sink将仅向屏幕返回输出结果。
3. 图形输出
虽然sink可以重定向文本输出,但它对图形输出没有影响。要重定向图形输出,使用
表1-4中列出的函数即可。最后使用dev.off将输出返回到终端。
表1-4 用于保存图形输出的函数
函数 输出
pdf"filename.pdf" PDF文件
win.metafile"filename.wmf" Windows图元文件
png"filename.png" PBG文件
jpeg"filename.jpg" JPEG文件
bmp"filename.bmp" BMP文件
postscript"filename.ps" PostScript文件
让我们通过一个示例来了解整个流程。假设我们有包含R代码的三个脚本文件script1.R、script2.R和script3.R。执行语句:
将会在当前会话中执行script1.R中的R代码,结果将出现在屏幕上。
如果执行语句:
文件script2.R中的R代码将执行,结果也将显示在屏幕上。除此之外,文本输出将被追加到文件myoutput中,图形输出将保存到文件mygraphs.pdf中。
最后,如果我们执行语句:
文件script3.R中的R代码将执行,结果将显示在屏幕上。这一次,没有文本或图形输出保存到文件中。整个流程大致如图1-6所示。
图1-6 使用函数source进行输入并使用函数sink进行输出
R对输入来源和输出走向的处理相当灵活,可控性很强。在1.5节中,我们将学习如何在批处理模式下运行R程序。
1.4 包
R提供了大量开箱即用的功能,但它最激动人心的一部分功能是通过可选模块的下载和安装来实现的。目前有2500多个称为包(package)的用户贡献模块可从http:cran.r-project.org
webpackages下载。这些包提供了横跨各种领域、数量惊人的新功能,包括分析地理数据、处理蛋白质质谱,甚至是心理测验分析的功能。本书中多次使用了这些可选包。
1.4.1 什么是包
包是R函数、数据、预编译代码以一种定义完善的格式组成的集合。计算机上存储包的目录称为库(library)。函数.libPaths能够显示库所在的位置,函数library则可以显示库中有哪些包。
R自带了一系列默认包(包括base、datasets、utils、grDevices、graphics、stats以及methods),它们提供了种类繁多的默认函数和数据集。其他包可通过下载来进行安装。安装好以后,它们必须被载入到会话中才能使用。命令search可以告诉你哪些包已加载并可使用。
1.4.2 包的安装
有许多R函数可以用来管理包。第一次安装一个包,使用命令install.packages即可。举例来说,不加参数执行install.packages将显示一个CRAN镜像站点的列表,选择其中一个镜像站点之后,将看到所有可用包的列表,选择其中的一个包即可进行下载和安装。如果知道自己想安装的包的名称,可以直接将包名作为参数提供给这个函数。例如,包gclus中提供了创建增强型散点图的函数。可以使用命令install.packages"gclus"来下载和安装它。
一个包仅需安装一次。但和其他软件类似,包经常被其作者更新。使用命令update.packages可以更新已经安装的包。要查看已安装包的描述,可以使用installed.packages命令,这将列出安装的包,以及它们的版本号、依赖关系等信息。
1.4.3 包的载入
包的安装是指从某个CRAN镜像站点下载它并将其放入库中的过程。要在R会话中使用它,还需要使用library命令载入这个包。例如,要使用gclus包,执行命令librarygclus即可。当然,在载入一个包之前必须已经安装了这个包。在一个会话中,包只需载入一次。如果需要,你可以自定义启动环境以自动载入会频繁使用的那些包。启动环境的自定义在附录B中有详细描述。
1.4.4 包的使用方法
载入一个包之后,就可以使用一系列新的函数和数据集了。包中往往提供了演示性的小型数据集和示例代码,能够让我们尝试这些新功能。帮助系统包含了每个函数的一个描述(同时带有示例),每个数据集的信息也被包括其中。命令helppackage="package_name"可以输出某个包的简短描述以及包中的函数名称和数据集名称的列表。使用函数help可以查看其中任意函数或数据集的更多细节。这些信息也能以PDF帮助手册的形式从CRAN下载。
R语言编程中的常见错误
有一些错误是R的初学者和经验丰富的R程序员都可能常犯的。如果程序出错了,请检查以下几方面。
? 使用了错误的大小写。help、Help和HELP是三个不同的函数(只有第一个
是正确的)。
? 忘记使用必要的引号。install.packages"gclus"能够正常执行,然而Ins-
tall.packagesgclus将会报错。
? 在函数调用时忘记使用括号。例如,要使用help而非help。即使函数无需参数,
仍需加上。
? 在Windows上,路径名中使用了\。R将反斜杠视为一个转义字符。setwd"c:mydata"会报错。正确的写法是setwd"c:mydata"或setwd"c:\\mydata"。
? 使用了一个尚未载入包中的函数。函数order.clusters包含在包gclus中。如
果还没有载入这个包就使用它,将会报错。
R的报错信息可能是含义模糊的,但如果谨慎遵守了以上要点,就应该可以避免许多错误。
1.5 批处理
多数情况下,我们都会交互式地使用R:在提示符后输入命令,接着等待该命令的输出结果。偶尔,我们可能想要以一种重复的、标准化的、无人值守的方式执行某个R程序,例如,你可能需要每个月生成一次相同的报告,这时就可以在R中编写程序,在批处理模式下执行它。
如何以批处理模式运行R与使用的操作系统有关。在Linux或Mac OS X系统下,可以在终端窗口中使用如下命令:
其中infile是包含了要执行的R代码所在文件的文件名,outfile是接收输出文件的文件名,options部分则列出了控制执行细节的选项。依照惯例,infile的扩展名是.R,outfile的扩展名为.Rout。
对于Windows,则需使用:
将路径调整为R.exe所在的相应位置和脚本文件所在位置。要进一步了解如何调用R,包括命令行选项的使用方法,请参考CRAN(http:cran.r-project.org)上的文档“Introduction
to R” 。
1.6 将输出用为输入——结果的重用
R的一个非常实用的特点是,分析的输出结果可轻松保存,并作为进一步分析的输入使用。让我们通过一个R中已经预先安装好的数据集作为示例阐明这一点。如果你无法理解这里涉及的统计知识,也别担心,我们在这里关注的只是一般原理。
首先,利用汽车数据mtcars执行一次简单线性回归,通过车身重量(wt)预测每加仑行驶的英里数(mpg)。可以通过以下语句实现:
结果将显示在屏幕上,不会保存任何信息。
下一步,执行回归,区别是在一个对象中保存结果:
以上赋值语句创建了一个名为lmfit的列表对象,其中包含了分析的大量信息(包括预测值、残差、回归系数等)。虽然屏幕上没有显示任何输出,但分析结果可在稍后被显示和继续使用。
键入summarylmfit将显示分析结果的统计概要,plotlmfit将生成回归诊断图形,而语句cook-cooks.distancelmfit将计算影响度量统计量,plotcook对其绘图。要在新的车身重量数据上对每加仑行驶的英里数进行预测,不妨使用predictlmfit,
mynewdata。
要了解某个函数的返回值,查阅这个函数在线帮助文档中的“Value”部分即可。本例中应当查阅helplm或?lm中的对应部分。这样就可以知道将某个函数的结果赋值到一个对象时,保存下来的结果具体是什么。
1.7 处理大数据集
程序员经常问我R是否可以处理大数据问题。他们往往需要处理来自互联网、气候学、遗传学等研究领域的海量数据。由于R在内存中存储对象,往往会受限于可用的内存量。举例来说,在我服役了5年的2G内存Windows
PC上,我可以轻松地处理含有1000万个元素的数据集(100个变量×100
000个观测)。在一台4G内存的iMac上,我通常可以不费力地处理含有上亿元素的数据。
但是也要考虑到两个问题:数据集的大小和要应用的统计方法。R可以处理GB级到TB级的数据分析问题,但需要专门的手段。大数据集的管理和分析问题留待附录G中讨论。
1.8 示例实践
我们将以一个结合了以上各种命令的示例结束本章。以下是任务描述。
1 打开帮助文档首页,并查阅其中的“Introduction to R”。
2 安装vcd包(一个用于可视化类别数据的包,我们将在第11章中使用)。
3 列出此包中可用的函数和数据集。
4 载入这个包并阅读数据集Arthritis的描述。
5 显示数据集Arthritis的内容(直接输入一个对象的名称将列出它的内容)。
6
运行数据集Arthritis自带的示例。如果不理解输出结果,也不要担心。它基本上显示了接受治疗的关节炎患者较接受安慰剂的患者在病情上有了更多改善。
7 退出。
所需的代码如代码清单1-3所示,图1-7显示了结果的示例。
代码清单1-3 使用一个新的包
图1-7 代码清单1-3的输出。(从左至右)为关节炎示例的输出结果、帮助文档首页、vcd包的信息、Arthritis数据集的信息,以及一幅展示关节炎治疗情况和治疗结果之间关系的图
如本例所示,我们只需使用少量R代码即可完成大量工作。
1.9 小结
本章中,我们了解了R的一些优点,正是这些优点吸引了学生、研究者、统计学家以及数据分析师等希望理解数据所具有意义的人。我们从程序的安装出发,讨论了如何通过下载附加包来增强R的功能。探索了R的基本界面,以交互和批处理两种方式运行了R程序,并绘制了一些示例图形。还学习了如何将工作保存到文本和图形文件中。由于R的复杂性,我们花了一些时间来了解如何访问大量现成可用的帮助文档。希望你对这个免费软件的强大之处有了一个总体的感觉。
既然已经能够正常运行R,那么是时候把玩你自己的数据了。在下一章中,我们将着眼于R能够处理的各种数据类型,以及如何从文本文件、其他程序和数据库管理系统中导入数据。