您好,欢迎来到聚文网。 登录 免费注册
R语言

R语言

  • 字数: 484
  • 装帧: 简装
  • 出版社: 清华大学出版社有限公司
  • 作者: 洪锦魁、蔡桂宏
  • 出版日期: 2016-05-01
  • 商品条码: 9787302430056
  • 版次: 1
  • 开本: 其他
  • 页数: 654000
  • 出版年份: 2016
定价:¥69 销售价:登录后查看价格  ¥{{selectedSku?.salePrice}} 
库存: {{selectedSku?.stock}} 库存充足
{{item.title}}:
{{its.name}}
精选
编辑推荐
真正的好书来自真正的行家,作为国际权威的R语言认证体系的获得者,作者是最早一批接触并迷恋R语言的程序员,并将学习研发经验转化成教材呈现出来,请支持原创,支持分享!
内容简介
DOS 时代用汇编语言,Windows 时代倡导 Windows 编程,Internet 时代是 HTML 的天下,进入大数据时代, R 语言必须掌握! 本书作者作为一名历经四个时代的老程序员,深知学习编程的痛苦与欢乐,结合多年的开发经验完成此书。 本书将从无到有地教读者 R 语言的使用,同时学习本书并不需要统计学基础,在学习编程的过程中,就掌握 了一些必要的统计知识。本书完整讲解了几乎所有 R 语言语法与使用技巧,通过丰富的程序案例讲解,让你事半 功倍。
作者简介
两位作者均获得大数据国际认证
目录
Chapter 01  基本概念 1-1  Big Data 的起源 2 1-2  R 语言之美 2 1-3  R 语言的起源 2 1-4  R 的运行环境 5 1-5  R 的扩展 5 1-6 本书的学习目标 5 本章习题 6 Chapter 02  第一次使用 R 2-1 第一次启动 R 8 2-1-1 在 Mac OS 下启动 R 8 2-1-2 在 Mac OS 下启动 RStudio 8 2-1-3 在 Windows 环境中启动 R 和 RStudio 9 2-2 认识 RStudio 环境 10 2-3 第一次使用 R 12 2-4 R 语言的对象设定 15 2-5 Workspace 窗口 16 2-6 结束 RStudio 18 2-7 保存工作成果 19 2-7-1 使用 save()函数保存工作成果 19 2-7-2 使用 saveimage()函数保存 Workspace 20 2-7-3 下载之前保存的工作 20 2-8 历史记录 21 2-9 程序注释 22 本章习题 24 Chapter 03  R 的基本数学运算 3-1 对象命名原则 28 3-2 基本数学运算 28 4 R 语言——迈向大数据之路 3-2-1 四则运算 28 3-2-2 余数和整除 29 3-2-3 次方或平方根 29 3-2-4 绝对值 30 3-2-5 exp()与对数 30 3-2-6 科学符号 e 31 3-2-7 圆周率与三角函数 32 3-2-8 四舍五入函数 32 3-2-9 近似函数 33 3-2-10 阶乘 34 3-3 R 语言控制运算的优先级34 3-4 无限大 Infinity 35 3-5 Not a Number(NaN) 36 3-6 Not Available(NA) 37 本章习题 39 Chapter 04  向量对象运算 4-1 数值型的向量对象 44 4-1-1 建立规则型的数值向量对象应使用序列符号 44 4-1-2 简单向量对象的运算 45 4-1-3 建立向量对象函数 seq() 46 4-1-4 连接向量对象函数 c() 47 4-1-5 重复向量对象函数 rep() 48 4-1-6 numeric()函数 48 4-1-7 程序语句跨行的处理 49 4-2 常见向量对象的数学运算函数 50 4-3 考虑 Inf、-Inf、NA 的向量运算 53 4-4 R 语言的字符串数据的属性 54 4-5 探索对象的属性 55 4-5-1 探索对象元素的属性 55 4-5-2 探索对象的结构 56 4-5-3 探索对象的数据类型 57 4-6 向量对象元素的存取 57 4-6-1 使用索引取得向量对象的元素 57 4-6-2 使用负索引挖掘向量对象内的部分元素 58 5 目录 4-6-3 修改向量对象元素值 59 4-6-4 认识系统内建的数据集 letters 和 LETTERS 60 4-7 逻辑向量(Logical Vector) 61 4-7-1 基本应用 61 4-7-2 对 Inf、-Inf 和缺失值 NA 的处理 63 4-7-3 多组逻辑表达式的应用 64 4-7-4 NOT 表达式 65 4-7-5 逻辑值 TRUE 和 FALSE 的运算 65 4-8 不同长度向量对象相乘的应用 66 4-9 向量对象的元素名称 67 4-9-1 建立简单含元素名称的向量对象 67 4-9-2 names()函数 67 4-9-3 使用系统内建的数据集 islands 68 本章习题 71 Chapter 05  处理矩阵与更高维数据 5-1 矩阵 Matrix 78 5-1-1 建立矩阵 78 5-1-2 认识矩阵的属性 79 5-1-3 将向量组成矩阵 81 5-2 取得矩阵元素的值 82 5-2-1 矩阵元素的取得 82 5-2-2 使用负索引取得矩阵元素 83 5-3 修改矩阵的元素值 84 5-4 降低矩阵的维度 86 5-5 矩阵的行名和列名 87 5-5-1 取得和修改矩阵对象的行名和列名 88 5-5-2 dimnames()函数 89 5-6 将行名或列名作为索引 90 5-7 矩阵的运算 91 5-7-1 矩阵与一般常数的四则运算 91 5-7-2 行(Row)和列(Column)的运算 93 5-7-3 转置矩阵 94 5-7-4 %*% 矩阵相乘 94 5-7-5 diag() 95 6 R 语言——迈向大数据之路 5-7-6 solve() 96 5-7-7 det() 97 5-8 三维或高维数组 97 5-8-1 建立三维数组 97 5-8-2 identical()函数 98 5-8-3 取得三维数组的元素 98 5-9 再谈 class()函数 99 本章习题 101 Chapter 06  因子 Factor 6-1 使用 factor()或 asfactor()函数建立因子 108 6-2 指定缺失的 Levels 值 109 6-3 labels 参数 109 6-4 因子的转换 110 6-5 数值型因子在转换时常见的错误 110 6-6 再看 levels 参数 111 6-7 有序因子(Ordered Factor) 112 6-8 table()函数 113 6-9 认识系统内建的数据集 114 本章习题 116 Chapter 07  数据框 Data Frame 7-1 认识数据框 120 7-1-1 建立第一个数据框 120 7-1-2 验证与设置数据框的列名和行名 121 7-2 认识数据框的结构 121 7-3 取得数据框的内容 122 7-3-1 一般取得 122 7-3-2 特殊字符$ 123 7-3-3 再看取得的数据 123 7-4 使用 rbind()函数增加数据框的行数据 124 7-5 使用 cbind()函数增加数据框的列数据 125 7-5-1 使用$符号 126 7-5-2 一次加多个列数据 126 7-6 再谈转置函数 t() 127 本章习题 128 7 目录 Chapter 08  串行 List 8-1 建立串行 134 8-1-1 建立串行对象——对象元素不含名称 134 8-1-2 建立串行对象——对象元素含名称 134 8-1-3 处理串行内对象元素的名称 135 8-1-4 获得串行的对象元素个数 136 8-2 获得串行内对象的元素内容 136 8-2-1 使用“$”符号取得串行内对象的元素内容 136 8-2-2 使用“[[ ]]”符号取得串行内对象的元素内容 137 8-2-3 串行内对象的名称也可当索引值 137 8-2-4 使用“[ ]”符号取得串行内对象的元素内容 138 8-3 编辑串行内对象的元素值 139 8-3-1 修改串行元素的内容 139 8-3-2 为串行增加更多元素 141 8-3-3 删除串行内的元素 144 8-4 串行合并 145 8-5 解析串行的内容结构 146 本章习题 148 Chapter 09  进阶字符串的处理 9-1 语句的分割 154 9-2 修改字符串的大小写 154 9-3 unique()函数的使用 155 9-4 字符串的连接 155 9-4-1 使用 paste()函数常见的失败实例 1 155 9-4-2 使用 paste()函数常见的失败实例 2 156 9-4-3 字符串的成功连接与 collapse 参数 156 9-4-4 再谈 paste()函数 157 9-4-5 扑克牌向量有趣的应用 158 9-5 字符串数据的排序 158 9-6 搜索字符串的内容 159 9-6-1 使用索引值搜索 160 9-6-2 使用 grep()函数搜索 160 9-7 字符串内容的更改 161 9-8 正则表达式(Regular Expression) 162 8 R 语言——迈向大数据之路 9-8-1 搜索具有可选择性 162 9-8-2 搜索分类字符串 163 9-8-3 搜索部分字符可重复的字符串 163 本章习题 164 Chapter 10  日期和时间的处理 10-1 日期的设置与使用 170 10-1-1 asDate()函数 170 10-1-2 weekdays()函数 170 10-1-3 months()函数 171 10-1-4 quarters()函数 171 10-1-5 Syslocaleconv()函数 171 10-1-6 SysDate()函数 172 10-1-7 再谈 seq()函数 172 10-1-8 使用不同格式表示日期 173 10-2 时间的设置与使用 173 10-2-1 Systime()函数 174 10-2-2 asPOSIXct()函数 174 10-2-3 时间也是可以作比较的 175 10-2-4 seq()函数与时间 175 10-2-5 asPOSIXlt()函数 175 10-3 时间序列 177 本章习题 180 Chapter 11  编写自己的函数 11-1 正式编写程序 184 11-2 函数的基本组成 184 11-3 设计第一个函数 185 11-4 函数也是一个对象 186 11-5 程序代码的简化 187 11-6 return()的功能 188 11-7 省略函数的大括号 189 11-8 传递多个函数参数的应用 190 11-8-1 设计可传递两个参数的函数 190 11-8-2 函数参数的默认值 191 9 目录 11-8-3 3 点参数“ ”的使用 192 11-9 函数也可以作为参数 194 11-9-1 正式实例应用 194 11-9-2 以函数的程序代码作为参数传送 195 11-10 局部变量和全局变量 195 11-11 通用函数(Generic Function)196 11-11-1 认识通用函数 print() 197 11-11-2 通用函数的默认函数 198 11-12 设计第一个通用函数 198 11-12-1 优化转换百分比函数 199 11-12-2 设计通用函数的默认函数 200 本章习题 202 Chapter 12  程序的流程控制 12-1 if 语句 208 12-1-1 if 语句的基本操作 208 12-1-2 if … else 语句 210 12-1-3 if 语句也可有返回值 212 12-1-4 if … else if … else if …else 213 12-1-5 嵌套式 if 语句 214 12-2 递归式函数的设计 215 12-3 向量化的逻辑表达式 217 12-3-1 处理向量数据时 if … else 产生的错误 217 12-3-2 ifelse()函数 217 12-4 switch 语句 219 12-5 for 循环 221 12-6 while 循环 224 12-7 repeat 循环 225 12-8 再谈 break 语句 226 12-9 next 语句 227 本章习题 228 Chapter 13  认识 apply 家族 13-1 apply()函数 234 13-2 sapply()函数 236 13-3 lapply()函数 238 10 R 语言——迈向大数据之路 13-4 tapply()函数 238 13-5 iris 鸢尾花数据集 240 本章习题 242 Chapter 14  输入与输出 14-1 认识文件夹 248 14-1-1 getwd()函数 248 14-1-2 setwd()函数 248 14-1-3 filepath()函数 248 14-1-4 dir()函数 248 14-1-5 listfiles()函数 249 14-1-6 fileexist()函数 250 14-1-7 filerename()函数 250 14-1-8 filecreate()函数 250 14-1-9 filecopy()函数 250 14-1-10 fileremove()函数 251 14-2 数据输出 cat()函数 251 14-3 读取数据 scan()函数 253 14-4 输出数据 write()函数 256 14-5 数据的输入 257 14-5-1 读取剪贴板数据 257 14-5-2 读取剪贴板数据 readtable()函数 258 14-5-3 读取 Excel 文件数据 259 14-5-4 认识 CSV 文件以及如何读取 Excel 文件数据 260 14-5-5 认识 delim 文件以及如何读取 Excel 文件数据 262 14-6 数据的输出 263 14-6-1 writeClipboard()函数 263 14-6-2 writetable()函数 264 14-7 处理其他数据 265 本章习题 272 Chapter 15  数据分析与处理 15-1 复习数据类型 276 15-2 随机抽样 276 15-2-1 将随机抽样应用于扑克牌 277 11 目录 15-2-2 种子值 277 15-2-3 模拟骰子 279 15-2-4 比重的设置 279 15-3 再谈向量数据的抽取并以 islands 为实例 280 15-4 数据框数据的抽取——对重复值的处理 282 15-4-1 重复值的搜索 284 15-4-2 which()函数 285 15-4-3 抽取数据时去除重复值 285 15-5 数据框数据的抽取——对 NA 值的处理 287 15-5-1 抽取数据时去除含 NA 值的行数据 287 15-5-2 naomit()函数 288 15-6 数据框的字段运算 289 15-6-1 基本数据框的字段运算 289 15-6-2 with()函数 290 15-6-3 identical()函数 290 15-6-4 将字段运算结果存入新的字段 290 15-6-5 within()函数 291 15-7 数据的分割 291 15-7-1 cut()函数 292 15-7-2 分割数据时直接使用 labels 设定名称 292 15-7-3 了解每一人口数分类有多少州 293 15-8 数据的合并 293 15-8-1 之前的准备工作 294 15-8-2 merge()函数使用于交集合并的情况 295 15-8-3 merge()函数使用于并集合并的情况 296 15-8-4 merge()函数参数“allx = TRUE” 296 15-8-5 merge()函数参数“ally = TRUE” 297 15-8-6 match()函数 297 15-8-7 %in% 298 15-8-8 match()函数结果的调整 299 15-9 数据的排序 299 15-9-1 之前的准备工作 299 15-9-2 向量的排序 300 15-9-3 order()函数 301 15-9-4 数据框的排序 301 12 R 语言——迈向大数据之路 15-9-5 排序时增加次要键值的排序 302 15-9-6 混合排序与 xtfrm()函数 304 15-10 系统内建数据集 mtcars 305 15-11 aggregate()函数 307 15-11-1 基本使用 307 15-11-2 公式符号 Formula Notation 307 15-12 建立与认识数据表格 308 15-12-1 认识长格式数据与宽格式数据 309 15-12-2 reshapes2 扩展包 309 15-12-3 将宽格式数据转成长格式数据 melt()函数 310 15-12-4 将长格式数据转成宽格式数据 dcast()函数 312 本章习题 315 Chapter 16  数据汇总与简单图表制作 16-1 之前的准备工作 320 16-1-1 下载 MASS 扩展包与 crabs 对象 320 16-1-2 准备与调整系统内建 state 相关对象 320 16-1-3 准备 mtcars 对象 322 16-2 了解数据的唯一值 322 16-3 基础统计知识与 R 语言 323 16-3-1 数据的集中趋势 323 16-3-2 数据的离散程度 325 16-3-3 数据的统计 328 16-4 使用基本图表认识数据 331 16-4-1 绘制直方图 331 16-4-2 绘制密度图 334 16-4-3 在直方图内绘制密度图 336 16-5 认识数据汇总函数 summary() 337 16-6 绘制箱形图 338 16-7 数据的相关性分析 341 16-7-1 iris 对象数据的相关性分析 341 16-7-2 stateUSA 对象数据的相关性分析 343 16-7-3 crabs 对象数据的相关性分析 344 16-8 使用表格进行数据分析 345 16-8-1 简单的表格分析与使用 345 16-8-2 从无到有建立一个表格数据 345 13 目录 16-8-3 分别将矩阵与表格转成数据框 347 16-8-4 边际总和 347 16-8-5 计算数据的占比 348 16-8-6 计算行与列的数据占比 349 本章习题 350 Chapter 17  正态分布 17-1 用直方图检验 crabs 对象 356 17-2 用直方图检验 beaver2 对象 357 17-3 用 QQ 图检验数据是否服从正态分布 359 17-4 shapirotest()函数 361 本章习题 363 Chapter 18  数据分析——统计绘图 18-1 分类数据的图形描述 368 18-1-1 条形图与 barplot()函数 368 18-1-2 圆饼图与 pie()函数 371 18-2 量化数据的图形描述 372 18-2-1 点图与 dotchart()函数 373 18-2-2 绘图函数 plot() 376 18-3 在一个页面内绘制多张图表的应用 391 18-4 将数据图存盘 393 18-5 新建窗口 395 本章习题 397 Chapter 19  再谈 R 的绘图功能 19-1 绘图的基本设置 404 19-1-1 绘图设备 404 19-1-2 绘图设置 407 19-1-3 layout()函数的设置 418 19-2 高级绘图 421 19-2-1 曲线绘图 curve() 421 19-2-2 绘图函数 coplot() 423 19-2-3 3D 绘图函数 426 19-3 低级绘图——附加图形于已绘制完成的图形 429 19-3-1 points()函数与 text()函数 429 14 R 语言——迈向大数据之路 19-3-2 lines()、arrows()与 segments()函数 432 19-3-3 ploygon()函数绘制多边形 434 19-3-4 abline()直线、legend()图例、title()抬头与 axis() 438 19-4 交互式绘图 443 本章习题 446 Appendix A  下载和安装 R A-1 下载 R 语言 456 A-2 下载 RStudio 458 Appendix B  使用 R 的补充说明 B-1 获得系统内建的数据集 460 B-2 看到陌生的函数 461 B-3 看到陌生的对象 461 B-4 认识 CRAN 463 B-5 搜索扩展包 463 B-6 安装与加载扩展包 464 B-7 阅读扩展包的内容 465 B-8 更新扩展包 466 B-9 搜索系统目前的扩展包 466 B-10 卸载扩展包 467 B-11 R-Forge 467 Appendix C  本书习题答案 Appendix D  函数索引表
摘要
    C H A P TER 01 基本概念 1-1 Big Data的起源 1-2 R语言之美 1-3 R语言的起源 1-4 R的运行环境 1-5 R的扩展 1-6 本书的学习目标 2 R 语言——迈向大数据之路 1-1  Big Data的起源 Big Data一词,有人解释为大数据, 也有人解释为巨量资料,其实都OK,本 书则以大数据为主要用法。 2012年世界经济论坛在瑞士达沃夫 (Davos)有一个主要议题“Big Data, Big Impact”,同年《纽约时报》(The New York Times,如右图所示)的一篇文章, 《How Big Data Became So Big》,清楚揭 露大数据时代已经降临,它可以用在商 业、经济和其他领域中。 1-2  R 语言之美 大数据需处理的数据是广泛的,基本上可分成两大类,有序数据与无序数据,对于有序数 据,目前许多程序语言已可处理。但对于无序数据,例如,地理位置信息、Facebook信息、视频 数据等,是无法处理的。而R语言正可以解决这方面的问题,自此R已成为有志成为信息科学家 (Data Scientist)或大数据工程师(Big Data Engineer)所必需精通的计算机语言。 Google 首席经济学家Hal Ronald Varian,如右图所示,有 一句经典名言形容 R。 The Great beauty of R is that you can modify it to do all sorts of things. And you have a lot of prepackaged stuff that’s already available, so you’re standing on the shoulders of giants. 大意是,R语言之美在于,你可以通过修改很多高手已 经写好的套件程序,解决各式各样的问题。因此,当你使用 R 语言时,你已经站在巨人的肩膀上了。 1-3  R 语言的起源 提到 R语言,不得不提John Chambers,如下图所示。他是加拿大多伦多大学毕业,然后拿到 哈佛大学统计硕士和博士。 本图片取材自 The New York Times 本图片取材自 Wikipedia 3 CHAPTER 01 基本概念 John Chambers在1976年于Bell实验室工作时,为 了节省使用SAS和SPSS软件经费,以Fortran为基础, 开发了 S语言。这个S语言主要是处理,向量(Vector) 、 矩阵(Matrix) 、数组(Array)以及进行图表和统计分析 的,初期只是可以在 Bell实验室的系统上运行,随后这 个 S语言被移植至早期的Unix系统下运行。然后Bell实 验室以很低的廉价格授权各大学使用。 R 语言主要是以S语言为基础,开发完成。 1993 年新西兰University of Auckland大学统计系的 教授Ross Ihaka和Robert Gentleman两位R先生,分别如 下图(左)和下图(右)所示,为了方便教授统计学, 以 S语言为基础开发完成一个程序语言,因为他两人名 前缀字皆是 R,于是他们所开发的语言就被称为R语 言,其 Logo如下图(右)所示。 Ross Ihaka Robert Gentleman R语言标准Logo 本图片取材自网络 本图片取材自网络 现在的R语言则由一个R核心开发团队负责,当然Ross Ihaka和Robert Gentleman是这个开 发团队的成员,另外,S语言的开发者John Chambers也是这个R语言开发团队的成员。目前这个 开发团队共有 18名成员,这些成员拥有修改R核心代码的权限。下列是R语言开发的几个有意 义的时间点。 1) 1990年代初期R语言被开发。 2) 1993年Ross Ihaka和Robert Gentleman 开发了R语言软件,在S-news邮件中发表。吸引了一 些人关注并和他们合作,自此一组针对R的邮件被建立。如果你想了解更多这方面的信息可 参考下图中的网址。 John Chambers 本图片取材自网络 4 R 语言——迈向大数据之路 3) 1995年6月在Martin Maechler(如下图所示)等人的努力下,这个R语言被同意免费使用, 同时遵守自由软件基金会(Free Software Foundation)的GNU General Public License(GNU通 用公共许可证,GPL) Version 2的协议。 Dr. Martin Maechler 取材自stat.ethz.ch/people/maechler 4) 1997年R语言核心开发团队成立。 5) 2000年第1版R1.0.0正式发布。Ross Ihaka将R的开发简史记录了下来,可参考下图中的 网址。 5 CHAPTER 01 基本概念 1-4  R 的运行环境 在 R语言核心开发团队的努力下,目前R语言已可以在常见的各种操作系统下运行。例如, Windows、Mac OS、Unix 和Linux。 1-5  R 的扩展 R 的一个重要优点是,R是Open Source License,这表示任何人均可下载并修改,因此许多人 在编写增强功能的套件,同时供他人免费使用。 1-6 本书的学习目标 不容否认,不论是S语言或R语言均是统计专家所开发的,因此,R具有可以完成各种统计 的工具。但已有越来越多的程序设计师开始加入学习R,使得R也开始可以完成非统计方面的工 作,例如,数据处理、图形处理、心理学、遗传学、生物学、市场调查等等。 本书在编写时,尽量将读者视为初学者,辅以丰富实例,期待读者可以用最轻松的方式学会 R 语言。 6 R 语言——迈向大数据之路 本章习题 一、判断题 (   ) 1.要成为大数据工程师(Big Data Engineer),学习R语言是一件很重要的事。 (   ) 2.Facebook信息、视频数据是可排序的数据。 (   ) 3.R语言目前只能在Windows和Mac OS系统下执行。 (   ) 4.R语言是免费软件。 二、单选题 (   ) 1. R语言无法在以下哪一个系统下执行? A. Linux B. Unix C. Android D. Mac OS (   ) 2.下列哪一个人对R语言的开发没有贡献? A. Steve Job B. Ross Ihaka C. John Chambers D. Robert Gentleman (   ) 3. R语言是以哪一个语言为基础开发完成? A. SAS B. S C. SPSS D. C 三、多选题 (   ) 1. 我们现在可以免费使用R语言,下列哪些人是有贡献的?(选择3项) A. Martin Maechler B. Ross Ihaka C. Robert Gentleman D. Tim Cook E. Marissa Mayer C H A P TER 02 第一次使用 R 2-1 第一次启动R 2-2 认识RStudio环境 2-3 第一次使用R 2-4 R语言的对象设定 2-5 Workspace窗口 2-6 结束RStudio 2-7 保存工作成果 2-8 历史记录 2-9 程序注释 8 R 语言——迈向大数据之路 有关安装 R语言程序与RStudio作业环境套件的操作可以参考附录A,本章笔者将介绍如何 启动和在 R Console窗口下撰写R程序。 2-1 第一次启动R 2-1-1 在Mac OS下启动R 在 Mac环境中,如果先前只是安装R,并没有安装RStudio,则可以在应用程序文件夹看到R 语言图标,如下图所示,然后启动。 双击标准 R图标,可以正式进入R-Console 环境,如下图所示。 在这里,就可以正式使用 R语言了。 2-1-2 在Mac OS下启动RStudio 如果你安装完 R,然后也安装完RStudio,则可以在屏幕下方工具栏看到RStudio图标,如下 图所示。 9 CHAPTER 02 第一次使用 R 即可以启动,R 的整合式窗口环境如下图所示。 由上图可以看到整合式窗口共有 4个区域,基本上左下方的Console窗口,是我们最常使用 的窗口。 注 未来所有实例,均是在 RStudio窗口内执行的。 2-1-3 在Windows环境中启动R和RStudio 安装完成 Windows系统的R后,如果启动R,可以看到下列R-Console 窗口。 10 R 语言——迈向大数据之路 如果安装并启动 RStudio,就可以看到下列RStudio窗口。 2-2 认识RStudio环境 可参考下图,基本上可以将 RStudio整合式窗口分成以下4大区域。 11 CHAPTER 02 第一次使用 R 1. Source Editor Soure Editor区域位于RStudio窗口左上角,如下图(左)所示。这是R语言的程序代码编辑 区,你可以在此编辑 R语言程序代码,储存,最后再运行。 2. Console Console 区域位于RStudio窗口左下角,如下图(右)所示。R语言也可以支持直译器(Interpreter) 功能,此时就需要使用此区域窗口,在此可以直接输入指令,同时获得执行结果。 3. Workspace Workspace 窗口位于RStudio窗口右上角,如下图(左)所示。如果选择Environment标签, 那么这区域会记录在 Console输入的所有指令的相关对象的变量名称和值。如果选择History标 签,则可以在此看到 Console窗口所有执行指令的记录。 4. Files、Plots、Packages、Help 和Viewer 该区域位于 RStudio窗口右下角,如下图(右)所示。这几个标签的功能分别如下所述。 1)Files :在此可以查看个文件夹的内容。 2)Plots :在此可以呈现图表。 3)Packages :在此可以看到已安装R的扩充套件。 4)Help :在此可浏览辅助说明文件内容。 12 R 语言——迈向大数据之路 2-3 第一次使用R 先前说过 R可以支持直译器功能,下图所示的是打印“Hello! R”,可参考下图所示的使用 Console 窗口的操作范例和结果。 在上图中可以了解到,“>”是R语言直译器的提示信息,当看到此信息时,即可以输入R命令。 当然我们也可以使用 Source Editor编辑程序,然后再执行。执行结果的实例,可参考下图。 首先编辑下图所法的程序代码。 13 CHAPTER 02 第一次使用 R 接着储存上述程序代码,如下图所示。 请单击上图中的储存按钮,也可以执行RStudio的File/Save As命令,接着选择适当的文件 夹,再输入适当的文件名。此例的命件名是 ch2_1,如下图所示。R语言默认的文件名扩展名是R。 所以执行完上述命令,就 相当于将代码储存在ch2_1.R。 在 RStudio的Source Editor区有“Source”标签,如下图所示。如果这时单击此标签,这个动 作被称为Sourcing a Script。其实这就是执行Source Editor工作区的程序(其实这个动作也会同时 储存程序代码)。单击“Source”标签后可以看到下图所示的执行结果。 14 R 语言——迈向大数据之路 一个完整的 R程序,即使是在Source Editor区编辑,其执行的非图形数据结果,也将是在 Console窗口中显示,如上图所示。如果此时检查RStudio整合式窗口的右下方,再单击“Files” 标签,适当地选择文件夹后,就可以看到 ch2_1.R文件,如下图所示。 假设现在想编辑新的文件,可单击下图中“ch2_1.R”标签右边的关闭按钮。 此时 Source Editor区的窗口会暂时消失。之后单击下图中Console窗口右上角的按钮。 15 CHAPTER 02 第一次使用 R 便可恢复显示 Source Editor窗口,如下图所示。 注 如果 Source Editor窗口内,同时有多个文件被编辑时,关闭一个所编辑的文件,此时将改成 显示其他编辑的文件。 2-4 R语言的对象设定 如果你学过其他计算机语言,想将变量 x 设为5,可使用下列方法。 16 R 语言——迈向大数据之路 x = 5 注 R 语言是一种面向对象的语言,上述x,也可被称为对象变量。甚至,有的R程序设计师称 x 为对象。在本书本章中笔者先用完整名称“对象变量”,在后续章节中,笔者将直接以对象 (Object)称之。 在 R语言中,可以使用上述等号,但更多的R语言程序设计师,会使用“<-”符号,其实此 符号与“=”号,意义一样。例如,将变量 x设定为5可按如下方式。 x <- 5 可参考下列实例。 在上述程序实例中,在给对象变量x赋值后,如果直接列出对象变量x,则相当于可列出对 象变量的值,此例是列出 5。至于“[1]”是指这是第一项输出。 另一个奇怪的 R的等号表示方式,是以“->”表示,这种表示方式的对象变量是放在等号右 边,如下所示。 5 -> x 可参考下列实例。 不过这种方法,R 程序设计师一般比较少用。 注 有些计算机语言,变量在使用前要先定义,R语言则不需先定义,可在程序中直接设定使 用,如本节实例所示。 2-5 Workspace窗口 在 Workspace窗口中,如果单击“Environment”标签,则可以看到至今所使用的对象变量及 此对象变量的值,如下图所示。 17 CHAPTER 02 第一次使用 R 如果单击“History”标签,则可以看到 Console窗口的所有执行命令的记录,如下图所示。 此外,若在Console窗口输入ls(),可以列出目前Environment所记录的所有对象变量,如下 所示。 延续之前实例,增加对象变量y,z。并设定对象变量y等于10,对象变量z值等于对象变量 x 加上对象变量y,如下所示。 此时在 Console窗口输入ls(),可以看到有3个对象变量,x、 y和z,如下所示。 18 R 语言——迈向大数据之路 如果检查 Workspace窗口,则可以看到这3个对象变量及其值,如下图所示。 使用 R时,如果某个对象变量不再使用,则可以使用rm()函数,将此对象变量删除。下列 是删除 z对象变量的实例及验证结果。 此时 Workspace窗口内的z对象变量也不再出现了,如下图所示。 2-6 结束RStudio 在 Console窗口,输入q(),来结束使用RStudio,如下所示。 ? y :表示将上述对象变量和对象变量的值存储在“.RData”文件,未来只要启动RStudio,此 “.RData”文件均会被加载到Workspace窗口。如果你将此文件在文件夹中删除,则重新启 动 RStudio时,Workspace窗口的内容就会是空白。2-7-2节会介绍此文件,供未来使用。 ? n :表示不储存。 ? c :表示取消。 也可以执行 RStudio窗口的File/Quit RStudio命令,结束使用RStudio,效果相同。 19 CHAPTER 02 第一次使用 R 2-7 保存工作成果 在正式谈保存工作成果前,笔者将先介绍另一个函数getwd(),用这个函数可以了解目前工 作的文件夹,相当于未来保存工作成果的文件夹。下列是笔者计算机的执行结果。 使用不同的操作系统,可能会有不同的结果。 2-7-1 使用save()函数保存工作成果 下列是笔者将 x和y对象变量保存在“xyvar.rda”文件中的运行实例。 执行完后,无任何确认信息,不过,可以在RStudio窗口右下方的Files/Plots窗口看到此 “xyvar.rda”文件,如下图所示。 当在窗口中看到上述文件时,表示保存对象变量 x和y的操作成功了。 20 R 语言——迈向大数据之路 2-7-2 使用save.image()函数保存Workspace 使用save.image()函数可以将整个Workspace保存在系统默认的“.RData”文件内,如下 所示。 上述命令被执行后可以得到下图所示的执行结果。 2-7-3 下载之前保存的工作 请先使用 rm()函数清除Workspace窗口的对象变量值。下列命令是清除对象变量x和y的值。 方法 1:使用load()函数,直接下载先前保存的值,如下所示。 如果此时检查 Workspace窗口,则可以得到下列结果,窗口中列出对象变量x和y的值。 方法2:也可以直接单击RStudio窗口右下方Files/Plots窗口的“xyvar.rda”文件,即可下载 之前储存的工作,如下图所示。 21 CHAPTER 02 第一次使用 R 笔者在2-7-2节有介绍,可使用save.image()将工作储存在“.RData”,其实也可以使用上述 方法,双击“RData”,下载所储存的工作。 2-8 历史记录 启动 RStudio后,基本上所有执行过的命令均会被记录在Workspace窗口的History标签选项 内,如下图所示。有时为了方便,不想太麻烦重新输入命令,可以单击此区执行过的指令,然后执 行下列两个操作。 ? To Console :将所单击的命令,重载到Console窗口。 ? To Source :将所单击的命令,重载到Source Editor窗口。 22 R 语言——迈向大数据之路 这可方便查阅所使用过的命令,或重新运行。如果你想将此历史记录保存,可以使用 savehistory()函数。然后此历史记录会被存入“.Rhistory”文件内。你可以通过查看RStudio窗口 右下方的 Files/Pilots窗口,看到此文件。 如果想用其他名称储存此历史档,则可使用下列方式。下列是将历史文件储存至“ch2_2. Rhistory”文件内。 如果想加载“.Rhistory”,则可以使用下列命令。 如果想加载特定的历史文件,例如先前储存的“ch2_2.Rhistory”,则可以使用下列命令。 2-9 程序注释 程序注释的主要功能是让你所设计的程序可读性更高,更容易了解。在企业工作,一个实用 的程序可以很轻易地超过几千或上万列,此时你可能需要设计好几个月。程序加上注释,可方便 你或他人,未来较便利地了解程序内容。 不论是使用直译器或是 R程序文件中,“#”符号右边的文字,皆被称为程序注释,R语言的 直译器或编译程序皆会忽略此符号右边的文字。可参考下列实例。 上述第二列“#”符号右边的文字,“print x”,是此程序的注释。下图所示的是R程序文件的一 23 CHAPTER 02 第一次使用 R 个实例。 程序注释 上述程序实例“ch2_2.R”的前3行,由于有“#”符号,代表是程序注释,在此笔者特别注 明,这是程序 ch2_2.R,相当于本章2-3节中的第二个程序实例。所以真正的程序只有第4行。 24 R 语言——迈向大数据之路 本章习题 一、判断题 (   ) 1. RStudio的Console窗口主要是编辑R语言程序代码,储存,最后再执行的窗口。 (   ) 2. R语言有支持直译器(Interpreter),可以在Console窗口直接输入命令,同时获得执 行结果。 (   ) 3. 在Workspace窗口,如果选择Environment标签,则可以在此看到Console窗口的所有 执行指令的记录。 (   ) 4. 一个完整的R程序,即使在Source Editor区编辑,其执行的非图形数据结果,将是在 Console 窗口中显示。 (   ) 5. 下列3个命令的执行结果是一样的。 或 或 二、单选题 (   ) 1. 下列哪一个符号是程序注释符号? A. % B. @ C. # D. ~ (   ) 2. 如果我们想使用R语言的直译功能,可以在下列哪一个窗口输入命令? A. Console 窗口 B. Source Editor 窗口 C. Workspace 窗口 D. Files/Plots 窗口 (   ) 3. 可以在以下哪一个窗口看到所有变量名称和它的内容? A. Console 窗口 B. Source Editor 窗口 C. Workspace 窗口 D. Files/Plots 窗口 (   ) 4. 下列哪一个符号不是R语言的等号符号? A. = B. <- C. -> D. # (   ) 5. 下列哪一个函数可以在Console窗口列出所有变量数据? A. ls() B. rm() C. q() D. getwd() (   ) 6. 下列哪一个函数可以将整个Workspace保存在系统默认的“.RData”文件内? A. save() B. save.image() C. load() D. savehistory() 25 CHAPTER 02 第一次使用 R 三、多选题 (   ) 1. 哪几个函数可以保存Console窗口执行过的命令? (选择两项) A. save() B. save.image() C. load() D. savehistory() E. getwd() 四、实际操作题(如果题目有描述不周详时,请自行假设条件) 1. 请研究RStudio窗口右上角的Workspace窗口,说明下列标签的功能。 (1) Environment。 (2) History。 (3) To Console。 (4) To Source。 2. 请研究RStudio窗口右下角的Files/Plots窗口,说明下列标签的功能。 (1) Files。 (2) Export。 MEMO C H A P TER 03 R 的基本数学运算 3-1 对象命名原则 3-2 基本数学运算 3-3 R语言控制运算的优先级 3-4 无限大Infinity 3-5 Not a Number(NaN) 3-6 Not Available(NA) 28 R 语言——迈向大数据之路 本章笔者将从为对象变量(也可简称对象)命名说起,接着介绍 R的基本算术运算。 3-1 对象命名原则 在 2-9节中,笔者介绍过,可以使用程序注释增加程序的可读性。在为对象命名时,如果使 用适当名称,也可以让你所设计的程序可读性增加许多。R 的基本命名规则包括以下几点。 1) 下列名称是R语言的保留字,不可当作是对象名称。 break, else, FALSE, for, function, if, Inf, NA, NaN, next, repe at, return, TRUE, while 2) R对英文字母大小写是敏感的,所以basket与Basket,会被视为两个不同的对象。 3) 对象名称开头必须是英文字母或点号(“.”),当以点号(“.”)开头时,接续的第二个字母不 可是数字。 4) 对象名称只能包含字母、数字、底线(“_”)和点号(“.”)。 笔者曾深深体会到,所设计的程序,时间一久后,常常会忘记各变量对象所代表的意义, 所以除了为程序加上注释外,为对象取个好名字也是程序设计师很重要的课题。例如,假设想为 James 和Jordon打篮球的得分取对象名称。你可以按如下设计。 ball1——代表 James的得分。 ball2——代表 Jordon的得分。 上述方式简单,但时间久了,比较容易忘记。如果用下列方式命名。 basket.James——代表 James的得分。 basket.Jordon——代表 Jordon的得分。 相信即使几年后,你仍可了解此对象所代表的意义。在上述命名时,笔者在名称中间加上点 号(“.”),在R语言中,这是R程序设计师常用的命名方式,又称点式风格(Dotted Style)。事实 上,R 语言的许多函数皆是采用此点式命名的,例如,2-9节所介绍的save.image()函数。 另外,为对象命名时也会采用驼峰式(Camel Case),将组成对象名称的每一个英文字母开头 用大写。例如,my.First.Ball.Game,这样可以直接明白此对象名称的意义。 3-2 基本数学运算 3-2-1 四则运算 R 的四则运算是指加( + ) 、减( - ) 、乘( * )和除( / )。 29 CHAPTER 03 R 的基本数学运算 实例 ch3_1:加法与减法运算实例。 注 在以上赋值(也可想成等号)中,笔者故意用“=”符号,本章赋值有时候也会用“<-”,主 要是用实例让读者了解 R是支持这两种赋值符号的。从第四章起笔者将统一使用“<-”当作 赋值符号。 实例 ch3_2:乘法与除法运算实例。 3-2-2 余数和整除 余数(mod)所使用的符号是“%%”,可计算出除法运算中的余数。整除所使用的符号是 “%/%”,是指在除法运算中只保留整数部分。 实例 ch3_3:余数和整除运算实例。 3-2-3 次方或平方根 次方的符号是“**”或“^”,平方根的计算是使用函数sqrt()。 30 R 语言——迈向大数据之路 实例 ch3_4:平方、次方和平方根运算实例。 3-2-4 绝对值 绝对值的函数名称是 abs(),不论函数内的值是正数或负数,结果均是正数。 实例 ch3_5:绝对值运算实例。 3-2-5 exp()与对数 exp() 是指自然数e的x次方,其中e的近似值是2.718282。 实例 ch3_6:exp()运算实例。 对数有以下两种类型。 31 CHAPTER 03 R 的基本数学运算 1) 以自然数e为底的对数,loge x = ln x,语法是 log()。 2) 一般基底的对数,logm x ,语法是log(x, m)。如果基底是10,也可使用另一个对数函数 log10()取代。 实例 ch3_7:不同基底的对数运算实例。 exp()和log()也可称互为反函数。 3-2-6 科学符号e 科学符号是用 e表示,例如数字12 800,实际等于“1.28 * 10^4”,也可以用“1.28e4”表示。 实例 ch3_8:科学符号的运算实例。 数字 0.00365,实际等于“3.65 * 10^-3”,也可以用“3.65e-3”表示。 实例 ch3_9:另一个科学符号的运算实例。 当然也可以直接使用科学符号执行四则运算。 实例 ch3_10:直接使用科学符号的运算实例。 32 R 语言——迈向大数据之路 上述的代码表示 600000除以300。 3-2-7 圆周率与三角函数 圆周率就是指 pi。pi是系统默认的参数,其近似值是3.141593。 实例 ch3_11:列出 pi值的实例。 R 语言所提供的三角函数有许多,例如,sin() 、cos() 、tan() 、asin() 、 acos() 、atan() 、 sinh() 、cosh() 、tanh() 、asinh() 、acos() 、atan()。 实例 ch3_12:三角函数运算实例。 3-2-8 四舍五入函数 R 语言的四舍五入函数是round()。 round(x, digits = k),表示将实数x,以四舍五入方式,计算至第k位小数。另外,round() 函数中的第 2个参数“digits =”也可以省略,直接在第2个参数位置输入数字。 实例 ch3_13:round()函数的各种运用实例。 33 CHAPTER 03 R 的基本数学运算 使用 round()函数时,如果第2个参数是负值,表示计数是以四舍五入取整数。例如,若参 数是“-2”,表示取整数至百位数。若参数是“-3”, 表示取整数至千位数。 实例 ch3_14:使用 round()函数,但digits参数是负值的运用实例。 signif(x, digits = k),也是一个四舍五入的函数,其中x是要做处理的实数,k是有效数字的 个数。例如,signif(79843.597, digits = 6),代表取6个数字,从左边算第7个数字以四舍五入的 方式处理。 实例 ch3_15:signif()函数的应用实例。 3-2-9 近似函数 R 语言有3个近似函数。 1) floor(x) :可得到小于等于x的最近整数。所以,floor(234.56)等于234。floor (-234.45)等于 -235。 2) ceiling(x):可得到大于等于x的最近整数。所以,ceiling(234.56)等于235。ceiling (-234.45)等于 -234。 3) trunc(x) :可直接取整数。所以,trunc(234.56)等于234。trunc(-234.45)等于-234。 34 R 语言——迈向大数据之路 实例 ch3_16:floor()、ceiling()和trunc()函数的运用实例。 3-2-10 阶乘 factorial(x)可以返回 x的阶乘。 实例 ch3_17:factorial()函数的运用。 3-3 R语言控制运算的优先级 当 R语言碰上多种计算同时出现在一个指令内时,除了括号“()”很优先外,其余计算优先 次序如下。 1) 指数。 2) 乘法、除法、求余数(%%)、求整数(%/%),依照出现顺序运算。 3) 加法、减法,依照出现顺序运算。 35 CHAPTER 03 R 的基本数学运算 实例 ch3_18:R 语言控制运算的优先级的应用实例。 3-4 无限大Infinity R 语言可以处理无限大的值,使用Inf表示,如果是负无限大则是-Inf。其实只要将某一个数 字除以 0,就可获得无限大。 实例 ch3_19:无限大 Inf的取得实例。 将某一个数字减去无限大 Inf,可以获得负无限大-Inf。 实例 ch3_20:负无限大 -Inf的取得实例。 另一个思考,如果将某一个数字除以无限大 Inf或负无限大-Inf,结果是多少?答案是0。 实例 ch3_21:把 Inf和-Inf当作分母的应用实例。 判断某一个数字是否为无限大(正值无限大或负值无限大),可以使用is.infinite(x),如果x 是则返回逻辑值(Logical Value)TRUE,否则返回 FALSE。 实例 ch3_22:使用 is.infinite()判断Inf和-Inf是否为正或负无限大,返回TRUE的实例。 36 R 语言——迈向大数据之路 实例 ch3_23:使用 is.infinite()判断Inf和-Inf是否为正或负无限大,返回FALSE的实例。 另一个有关的函数式 is.finite(x),如果数字x是有限的(正有限大或负有限大)则返回 TRUE,否则返回 FALSE。 实例 ch3_24:使用 is.finite()判断一个数是否为有限大的实例。 注 在其他程序语言中,TRUE和FALSE被称为布尔值(Boolean Value),但在R语言中,R 的开发人员将此称为逻辑值(Logical Value)。 3-5 Not a Number(NaN) 在 R语言中,Not a Number(NaN)可以解释为非数字或无定义数字,由上一小节可知,任 一数字除以 0可得无限大,任一数字除以无限大可得0,那无限大除以无限大呢?此时可以获得 37 CHAPTER 03 R 的基本数学运算 NaN(Not a Number)。 实例 ch3_25:NaN 值的获得实例。 R 语言将NaN当作一个数字,可以使用NaN参加四则运算,但所得结果均是NaN。 实例 ch3_26:NaN 值的四则运算实例。 使用 is.nan(x)函数,可检测x是否为NaN,如果是则返回TRUE,否则返回FALSE。 实例 ch3_27:当 is.nan() 函数的参数是NaN时的运算实例。 另外,对于 NaN而言,无论使用is.finite()还是is.infinite()判断,均传回FALSE。 实例 ch3_28:为 is.finite()和is.infinite()函数的参数是NaN时的运算实例。 3-6 Not Available(NA) Not Available也可被称为缺失值NA,我们可以将NA当作一个有效数值,甚至可以将此值应 用在四则运算中,不过,通常计算结果是 NA。 38 R 语言——迈向大数据之路 实例 ch3_29:缺失值 NA的运算实例。 R 语言提供的is.na(x)函数可判断x是否为NA,如果是则返回TRUE,否则返回FALSE 。 实例 ch3_30:is.na() 函数的参数是缺失值NA和一般值的运算实例。 对于 NaN而言,使用is.na()判断,可以得到TRUE。 实例 ch3_31:is.na() 函数的参数是NaN的运算实例。 39 CHAPTER 03 R 的基本数学运算 本章习题 一、判断题 (   ) 1. 有以下两个命令。 上述两个命令被执行后,x1 和x2的值是相同的,均是 4。 (   ) 2. 有以下两个命令。 上述两个命令被执行后,x1 和x2的值是相同的,均是 8。 (   ) 3. 有以下两个命令。 上述两个命令被执行后,x1 和x2的值是相同的,均是 88.88。 (   ) 4. 有如下命令。 上述命令被执行后,x 的值是1600。 (   ) 5. 有如下命令。 上述命令被执行后,x 的值是8。 (   ) 6. 有如下命令。 上述命令被执行后,x 的值是0。 (   ) 7. 有以下两个命令。 上述命令的执行结果是 FALSE。 (   ) 8. 有如下命令。 上述命令被执行后,x 的值是1。 40 R 语言——迈向大数据之路 (   ) 9. 有以下两个命令。 上述命令的执行结果是 TRUE。 (   ) 10. 有以下两个命令。 上述命令的执行结果是 TRUE。 二、单选题 (   ) 1. 下列哪一个是R语言不合法的变量名称? A. x3 B. x.3 C. .x3 D. 3.x (   ) 2. 以下命令会得到哪种数值结果? A. [1] 4 B. [1] 2 C. [1] 3 D. [1] 1 (   ) 3. 以下命令会得到哪种数值结果? A. [1] 3.1415926 B. [1] pi C. [1] 3.14 D. [1] 3 (   ) 4. 以下命令会得到哪种数值结果? A. [1] 18 B. [1] 6 C. [1] 9 D. [1] 3 (   ) 5. 以下命令会得到哪种数值结果? A. [1] 5678.78 B. [1] 5678.77 C. [1] 5678.778 D. [1] 5678.778000 (   ) 6. 以下命令会得到哪种数值结果? A. [1] 789.8 B. [1] 789.789 C. [1] 789 D. [1] 790 (   ) 7. 以下命令会得到哪种数值结果? A. [1] 0 B. [1] Inf C. [1] NA D. [1] NaN 41 CHAPTER 03 R 的基本数学运算 三、多选题 (   ) 1. 下列哪些命令的执行结果是TRUE?( 选择两项) A. B. C. D. E. 四、实际操作题(如果题目有描述不周详的,请自行假设条件) 1. 求99的平方、立方和平方根。 2. x = 345.678,将x放入round()、signf(),使用默认值测试,并列出结果。 3. 重复上一习题,将参数digits依次从-2设置到2,并列出结果。 4. x = 674.378,将x放入floor()、ceil()和trunc(),使用默认值测试,并列出结果。 5. 重复上一习题,将x改为负值-674.378,并列出结果。 6. 计算下列命令的结果。 (1) Inf + 100。 (2) Inf – Inf + 10。 (3) NaN + Inf。 (4) Inf- NaN。 (5) NA + Inf。 (6) Inf – NA。 (7) NaN + NA。 7. 将上述数据(a-g)的执行结果用下列函数测试并列出结果。 (1) is.na()。 (2) is.nan()。 (3) is.finite()。 (4) is.infinite()。 MEMO C H A P TER 04 向量对象运算 4-1 数值型的向量对象 4-2 常见向量对象的数学运算函数 4-3 考虑Inf、-Inf、NA的向量运算 4-4 R语言的字符串数据的属性 4-5 探索对象的属性 4-6 向量对象元素的存取 4-7 逻辑向量(Logical Vector) 4-8 不同长度向量对象相乘的应用 4-9 向量对象的元素名称 44 R 语言——迈向大数据之路 R 语言最重要的特色是向量(Vector)对象的概念。如果你学过其他计算机语言,应该知道一 维数组(Array)的概念,其实所谓的向量对象就是类似一组一维数组的数据,在此组数据中,每 个元素的数据类型是一样的。不过向量对象的使用比其他高级语言灵活太多了,R的开发团队将 此一维数组数据称为向量(Vector)对象。 说穿了,R 语言就是一种处理向量的语言。 其实 R语言中最小的工作单位是向量对象,至于前面章节笔者当作范例使用的一些对象变 量,从技术上讲可将那些对象变量看作是一个只含一个元素的向量对象变量。至今为止,在输出 每一个数据时,首先出现的是“[ 1 ]”,中括号内的“1”表示接下来是从对象的第1个元素开始输 出的。对数学应用而言,向量对象元素大都是数值数据型的,R的更重要的功能是向量对象元素 可以是其他数据型的,本书将在以后章节中一一介绍。 4-1 数值型的向量对象 数值型的向量对象可分为规则型的数值向量对象或不规则型的数值向量对象。 4-1-1 建立规则型的数值向量对象应使用序列符号 从起始值到最终值,每次递增1,如果是负值则每次增加-1。例如从1到5,可用1:5的方式 表达。从11到16,可用11:16的方式表达。在“1:5”或“11:16”的表达式中的“:”符号,即冒 号,在 R语言中称其为序列符号(Sequence)。 实例 ch4_1:使用序列号“:”建立向量对象。 这种方式也可以应用于负值,每次增加 -1。例如,从-3到-7,可用-3:-7的方式表达。 实例 ch4_2:使用序列号建立含负数的向量对象。 同理,这种方式也可以应用于实数,每次增加正 1或-1。 45 CHAPTER 04 向量对象运算 实例 ch4_3:使用序列号建立实数的向量对象。 在建立向量对象时,如果写成1.5:4.7,结果会如何呢?这相当于建立含下列元素的向量对 象,1.5、2.5、3.5、4.5 共4个元素,至于多余部分即4.5至4.7之间的部分则可不理会。若向量 对象的元素为负值时,依此类推。 实例 ch4_4:另一个使用序列号建立实数的向量对象。 4-1-2 简单向量对象的运算 向量对象的一个重要功能是向量对象在执行运算时,向量对象内的所有元素将同时执行运算。 实例 ch4_5:将每一个元素加 3的执行情形。 一个向量对象也可以与另一个向量对象相加。 实例 ch4_6:向量对象相加的实例。 读至此节,相信各位读者一定已经感觉到R语言的强大功能了,如果上述指令使用非向量语 言,则需使用循环指令处理每个元素,要好几个步骤才可完成。在执行向量对象元素的运算时, 也可以处理不相同长度的向量对象运算,但先决条件是较长的向量对象的长度是较短的向量对象 的长度的倍数。如果不是倍数,则会出现错误信息。 46 R 语言——迈向大数据之路 实例 ch4_7:不同长度的向量对象相加,出现错误信息的实例。 由于上述较长的向量对象有 5个元素,较短向量对象有4个元素,所以较长向量的长度不是 较短向量的长度的倍数,因此最后执行后出现警告信息。 实例ch4_8:不同长度的向量对象相加,较长向量对象的长度是较短向量对象的长度的倍数的运 算实例。 上述的运算规则是,向量对象y的长度与较长的向量对象的长度相同,其长度是6,较长向 量对象的第 1个元素与1:3的1相加,较长向量对象的第2个元素与1:3的2相加,较长向量对象 的第 3个元素与1:3的3相加,较长向量对象的第4个元素与1:3的1相加,较长向量对象的第5 个元素与 1:3的2相加,较长向量对象的第6个元素与1:3的3相加。未来如果碰上不同倍数的情 况,运算规则可依此类推。 实例 ch4_9:下列是另一个不同长度向量对象相加的实例。 在上述实例中,x向量对象有5个元素,y向量对象有1个元素,碰上这种加法,相当于每个 x 向量元素均加上y向量的元素值。过去的实例,在输出时,笔者均直接输入向量对象变量,即可 在 Console窗口打印此向量对象变量的值,在此例中,可以看到第3列,即使仍是一个数学运算, Console 窗口仍将打印此数学运算的结果。 4-1-3 建立向量对象函数seq() seq()函数可用于建立一个规则型的数值向量对象,它的使用格式如下所示。 seq( from, to, by = width, length.out = numbers) 上述 from是数值向量对象的起始值,to是数值向量对象的最终值,by则指出每个元素的增 值。如果省略by参数,同时没有length.out参数存在,则增值是1或-1。length.out参数字段可设 定 seq()函数所建立的元素个数。 47 CHAPTER 04 向量对象运算 实例 ch4_10:使用 seq()建立规则型的数值向量对象。 4-1-4 连接向量对象函数c() c()函数中的c是concatenate的缩写。这个函数并不是一个建立向量对象的函数,只是一个 将向量元素连接起来的函数。 实例 ch4_11:使用 c()函数建立一个简单的向量对象。 上述 x是一个向量对象,共有5个元素,分别是1、3、7、2、9。 适当地为变量取一个容易记的变量名称,可以增加程序的可读性。例如,我们想建立NBA球 星 Lin,2016年前6场赛季进球数的向量对象,那么假设他的每场进球数如下所示。 7, 8, 6, 11, 9, 12 此时可用 baskets.NBA2016.Lin当变量名称,相信这样处理后,即使程序放再久,也可以轻易 了解程序内容。 实例 ch4_12:建立 NBA球星进球数的向量对象。 如果球星 Lin的进球皆是2分球,则他每场得分如下。 实例 ch4_13:计算 NBA球星的得分。 假设队友 Jordon前6场进球数分别是10, 5, 9, 12, 7, 11,我们可以用如下方式计算每场两个人 48 R 语言——迈向大数据之路 的得分总计。 实例 ch4_14:计算 NBA球星Lin和Jordon的每场总得分。 先前介绍可以使用 c()函数,将元素连接起来,其实也可以将两个向量对象连接起来,下面 是将 Lin和Jordon进球连接起来,结果是一个含12个元素的向量对象的实例。 实例 ch4_15:使用 c()函数建立向量对象,其中c()函数内有多个向量对象参数。 从上述执行结果可以看到,c()函数保持了每个元素在向量对象内的顺序,这个功能很重 要,因为未来我们要讲解如何从向量对象中存取元素值。 4-1-5 重复向量对象函数rep() 如果向量对象内某些元素是重复的,则可以使用rep()函数建立这类型的向量对象,它的使 用格式如下所示。 rep(x, times = 重复次数 , each = 每次每个元素的重复次数, length.out = 向量长度) 如果 rep()函数内只含有x和times参数,则“times =”参数可省略。 实例 ch4_16:使用 rep()函数建立向量对象的应用。 4-1-6 numeric()函数 numeric()也是一个建立函数,主要是可用于建立一个固定长度的向量对象,同时向量对象 元素的默认值是 0。 49 CHAPTER 04 向量对象运算 实例 ch4_17:建立一个含 10个元素的向量对象,同时这些向量对象元素的值皆为0。 4-1-7 程序语句跨行的处理 在本章 4-1-5节的最后一个实例中,可以很明显看到rep()函数包含说明文字已超出一行, 其实 R语言是可以识别这行的命令未完,下一列是相同行的。除了上述情况外,下列是几种可能 发生程序跨行的情况。 1) 该行以数学符号( +、-、*、/ )作结尾,此时R语言的编译程序会知道下一行是接续此行的。 实例 ch4_18:以数学符号作结尾,了解程序语句跨行的处理。 2) 使用左括号“(”,R编辑器会知道在下一行出现的片断数据是同一括号内的命令,直至出现 右括号“)”,才代表命令结束。 实例 ch4_19:使用左括号“(”和右括号“)”,了解程序跨列的处理。 3) 字符串是指双引号间的文字字符,在设定字符串时,如果有了第一个双引号,但尚未出现第 二个双引号,R语言编辑器可以知道下一行出现的字符串是同一字符串向量变量的数据,但 此时换行字符“/n”将被视为字符串的一部分。 注 有关字符串数据的概念,将在 4-4节说明。 实例 ch4_20:使用字符串,了解程序语句跨行的处理。 50 R 语言——迈向大数据之路 4-2 常见向量对象的数学运算函数 研读至此,如果你学过其他高级计算机语言,你会发现向量对象变量已经取代了一般计算机 程序语言的变量,这是一种新的思维,同时如果你阅读本节的常用向量对象的数学运算函数后, 你将发现为何 R这么受到欢迎。 1. 常见运算函数 sum():可计算所有元素的和。 max():可计算所有元素的优选值。 min():可计算所有元素的最小值。 mean():可计算所有元素的平均值。 实例 ch4_21:sum()、max() 、min()和mean()函数的应用。 此外,这几个函数也可以在括号内放上几个向量对象变量执行运算。 实例 ch4_22:sum()、max() 和min()函数的参数含有多个向量对象变量的应用。 2. prod()函数 prod():计算所有元素的积。 实例 ch4_23:使用 prod()执行阶乘的运算。

蜀ICP备2024047804号

Copyright 版权所有 © jvwen.com 聚文网