1 R语言介绍
一个典型的数据分析过程如下,是一个需要不断迭代和修正的过程。
1.1 为何要使用R?
R有着非常多值得推荐的特性:
- 多数商业统计软件价格不菲,投入成千上万美元都是可能的。而R是免费的!如果你是一位教师或一名学生,好处显而易见;
- R是一个全面的统计研究平台,提供了各式各样的数据分析技术;
- R拥有顶尖水准的制图功能;
- R是一个可进行交互式数据分析和探索的强大平台,其核心设计理念就是支持上图中所概述的分析方法;
- R可以轻松地从各种类型的数据源导入数据,包括文本文件、数据库管理系统、统计软件,乃至专门的数据仓库;
- R可运行于多种平台之上,包括Windows、UNIX和Mac OS X。
总的来说,R能够让你以一种简单而直接的方式创建优雅、信息丰富、高度定制化的图形。而使用其他统计语言创建类似的图形不仅费时费力,而且可能根本无法做到。
1.2 R的获取和安装
R可以在CRAN上下载并安装,提供了Windows、UNIX和Mac OX等各大平台的安装版本。之后还将介绍如何安装增强R功能的可选模块——包(package)。
1.3 R的使用
R是一种区分大小写的解释型语言,你可以在命令提示符(>)后每次输入并执行一条命令,或者一次性运行在脚本中写好的多条命令。
R的多数功能由程序内置函数和用户自编函数提供(如果你用过python、matlab之类,这里应该很好理解)。一些函数是默认可用的,其他高级函数需要按需加载相应的模块。
R使用<-赋值,而不是传统的=,例如:
创建了一个名为x的向量对象,包含5个来自标准正态分布的随机偏差。
在R中,注释由符号#开头。
一个简单的例子
可以使用函数c()以向量的形式赋值,并使用内置的统计函数计算统计值,然后用图形展示,最后使用q()退出R。来一个计算婴儿月龄和体重数据的例子吧!
再附上几个R绘图demo命令:demo(graphics)、demo(Hershey)、demo(persp)、demo(image)。查看完整的演示列表,直接运行demo()。
获取帮助
当你需要帮助时,不妨使用以下命令:
- 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文档。
工作空间
工作空间就是当前R的工作环境,它储存着所有用户定义的对象(向量、矩阵、函数、数据框、列表),你可以保存和载入工作空间。交互过程的历史命令也保存于工作空间中,可以使用上下方向键查看,用return来重复执行上条命令。
一些和工作空间相关的函数:
- getwd():显示当前的工作目录;
- setwd(“mydirectory”):修改当前的工作目录为mydirectory;
- ls():列出当前工作空间中的对象;
- rm(objectlist):移除(删除)一个或多个对象;
- help(options):显示可用选项的说明;
- options():显示或设置当前选项;
- history(#):显示最近使用过的#个命令(默认值为25);
- savehistory(“myfile”):保存命令历史到文件myfile中(默认值为.Rhistory);
- loadhistory(“myfile”):载入一个命令历史文件(默认值为.Rhistory);
- save.image(“myfile”):保存工作空间到文件myfile中(默认值为.RData);
- save(objectlist, file=”myfile”):保存指定对象到一个文件中;
- load(“myfile”):读取一个工作空间到当前会话中(默认值为.RData);
- q():退出R,将会询问你是否保存工作空间。
输入和输出
如果需要运行一个R脚本中的多行命令该如何操作?R使用source(“filename”)载入脚本,使用sink(“filename”)将结果输出到文档中。其中后者可以加参数,append=TRUE表明将输出文本追加到文件后而不是覆盖,split=TRUE可将输出同时发送到屏幕和输出文本中,不加参数调用sink()将仅向屏幕返回输出结果。
图形输出的话,可使用以下函数输出成相应文件:pdf(“filename.pdf”)、win.metafile(“filename.wmf”)、png(“filename.png”)、jpeg(“filename.jpg”)、bmp(“filename.bmp”)、postscript(“filename.ps”),最后使用dev.off()将输出返回至终端。
总而言之,屏幕是默认的文本和图像输出端,但是也可以指定输出至文件。
1.4 包
包是R的可选扩展功能模块,官方提供的2500多个包横跨各种领域、功能惊人,包括分析地理数据、处理蛋白质质谱,甚至是心理测验分析的功能。
.libPath()函数可以查看R中已安装的包集合(称为库)的路径,函数library()可以显示库中有哪些包,函数search()可以得到哪些包已经被加载并可以使用。
包的安装
install.packages(),不带参数则返回一个CRAN镜像站点列表,带参数即包名则直接安装。
一个包只需要安装一个,包若有更新,则使用update.packages(“packagename”)进行更新。
使用installed.packages()查看已经安装的包及描述。
包的载入
使用library(packagename)以载入包,一次会话中只需要加载一次。当然也可以自定义启动环境,以自定义默认加载的包。
包的使用
加载了包之后,使用help(package=”packagename”)来查看该包的帮助信息,包括函数名称和数据集列表。
1.5 批处理
如果希望不是交互地运行R,而是周期地重复运行R文件,该如何做呢?
Linux或Mac OS下:
其中infile为包含要执行R代码的文件名,扩展名为.R,outfile为接收输出文件名,扩展名为.Rout,options列出了控制执行细节的选项。
1.6 实战
完成以下操作吧!
- 打开帮助文档首页,并查阅其中的“Introduction to R”;
- 安装vcd包(一个用于可视化类别数据的包);
- 列出此包中可用的函数和数据集;
- 载入这个包并阅读数据集Arthritis的描述;
- 显示数据集Arthritis的内容(直接输入一个对象的名称将列出它的内容);
- 运行数据集Arthritis自带的示例;
- 退出。
所需代码:
2 创建数据集
按照个人要求的格式来创建含有研究信息的数据集,这是任何数据分析的第一步。在R中,这个任务包括以下两步:
- 选择一种数据结构来存储数据;
- 将数据输入或导入到这个数据结构中。
2.1 数据结构
R拥有许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表,其中一部分数据类型可以用下图来说明:
向量
向量是用于存储数值型、字符型或逻辑型数据的一维数组,单个向量中的数据必须拥有相同的类型或模式。
用方括号访问向量中的元素,如访问向量a中的第二个和第四个元素:
支持冒号语法,以下将返回a的第二至第六个元素:
矩阵
矩阵是一个二维数组,每个元素都拥有相同的模式(数值型、字符型或逻辑型)。可通过函数matrix创建矩阵。
其中vector向量包含了矩阵元素,nrow和ncol为行数和列数,byrow默认为FALSE表示按列填充,否则TRUE为按行填充,dimnames为行列名。使用时,只有前三个参数是必须的。
x[i,]表示矩阵x中的第i行,x[,j]表示矩阵x中的第j列,x[i,j]表示矩阵x中的第i行第j个元素,或者使用数值型向量代替i、j以选择多行或多列。
数组
数组和矩阵类似,但是维度可以大于2,通过array函数创建。
其中vector包含数组中的数据,dimensions是一个数值型向量,给出了各个维度下标的最大值,dimnames可选、表示各维度名称标签的列表。
数据框
可以理解成数据库中的表,特点是不同的列可以包含不同模式(数值型、字符型等)数据,但是每列的数据模式必须相同,通过data.frame创建。
访问数据可以通过以下三种方式:
如果希望生成diabetes和status的列联表,使用以下代码即可:
可以使用attach()和detach()将数据框添加至R搜索路径或移除: