R语言基础

    1. R语言基础

R语言是一个体系庞大的应用软件,主要包括核心的R标准包和各专业领域的其他包。本书采用原理加示例的方式来对R语言相关函数进行介绍。本章主要对R语言的基本信息、R软件和RStudio的安装及升级、常用包的安装与加载,以及R包内置数据集进行简单介绍。

1.1.1 认识 R 语言

1.1.1.1 R语言的基本信息

R 语言是一种为统计计算和图形显示而设计的语言环境,是贝尔实验室(BellLaboratories)的Rick Becker、John Chambers和Allan Wilks开发的S语言的一种实现,提供了一系列统计和图形显示工具。R语言是面向对象的一种编程语言,也是一套开源的数据分析解决方案,由一个庞大且活跃的全球性研究型社区维护。它具有下列优势。

1、R语言是完全免费的统计分析软件,可以在不同的平台上运行,包括Windows、UNIX、Mac OS和Linux。

2、R语言可以轻松地从各种类型的数据源读写数据,包括带分隔符的文件、统计软件、数据库管理系统,以及专门的数据仓库。几乎所有类型的数据都可以用R语言进行分析统计。

3、R语言的优势主要体现在其软件包生态系统具有较高的开放性(即免费开源)。R语言不仅提供功能丰富的内置函数供用户调用,也允许用户编写自定义函数来扩充功能。读者无须申请权限即可直接查看软件包或程序包的源码,并且对其进行拓展。如果某项统计技术已经存在,那么必然存在着一款R软件包与之对应。

4、R语言是有顶尖水准的制图功能。R语言的拓展包中dplyr与ggplot2可分别用于数据处理与绘图,且能够非常直观地提升用户对数据的理解。

1.1.1.2 R语言的编辑窗口

R语言的编辑窗口与其他编程软件类似,由菜单栏和快捷按钮组成。快捷按钮下面的窗口便是命令输入窗口,它也是部分运算结果的输出窗口,有些运算结果则会在新建的窗口中输出。主窗口上方的一些文字是刚运行R语言时出现的一些说明和指引,文字下的“>”符号便是R语言的命令提示符,在其后可输入命令。

R语言一般采用交互式工作方式,在命令提示符后输入命令,按“Enter”键后便会输出计算结果。当然,也可将所有的命令存储在一个文件中,运行这个文件的全部或部分来执行相应的命令,从而得到相应的结果。

菜单栏位于工作环境的最上方。文件菜单可以实现的功能有输入R语言代码、建立新的程序脚本、打开程序脚本、显示文件、载入工作空间、保存工作空间、载入历史、保存历史、改变当前目录、打印、保存到文件及退出。编辑菜单可以实现复制、粘贴、清除控制台和数据编辑等功能。查看菜单可以选择是否显示工具栏。其他菜单可以实现中断目前计算、缓冲输出及列出目标对象等功能。程序包菜单可以实现载入程序包、设定CRAN镜像、安装及更新程序包等功能。窗口菜单可以将所有窗口层叠或者平铺。帮助菜单提供R语言的常见问答和帮助途径。当执行不同的窗口操作时,菜单的内容就会发生变化。如打开R语言文件或一个编写好的R语言函数后,菜单栏就会缺失查看、其他两个菜单选项。

工具栏从左至右可以依次进行打开程序脚本、载入映像、保存映像、复制、粘贴、刷新、终止目前计算及打印的操作。当打开R语言文件或一个编写好的R语言函数时,工具栏会发生相应的变化,此时的快捷按钮从左至右依次为打开程序脚本按钮、保存映像按钮、运行当前行代码或所选代码按钮、返回主界面按钮及打印按钮。

命令窗口是R语言进行工作的窗口,也是实现R语言各种功能的窗口,其中的“>”是命令提示符,表示R语言处于准备编辑的状态。读者可以直接在命令提示符后输入命令语句,按“Enter”键执行。

R语言是一种基于对象(Object)的语言,所以在R语言中接触的每样东西都是一个对象,一串数值向量是一个对象,一个函数是一个对象,一个图形也是一个对象。基于对象的编程(Object Oriented Programming,OOP)就是在定义类的基础上创建与操作对象的。

需要特别说明的是,在R语言中,赋值符号一般采用“<”,表示将右边的内容赋值给左边的变量。同样的,R语言还提供反向赋值的功能,如下面的代码所示。但注意,在函数的参数设置里面要用等号。R语言允许使用“=”为对象赋值,但是它不是标准语法,在某些情况下用等号赋值会出现问题。

> a <- 'Hello world!’

> a

[1]“Hello world!”

> 'Hello world!'-> b

> b

[1] "Hello world!"

> plot(1:10, col='red')#此时,参数设置使用“=”

1.1.2 R语言的编译环境

R语言的原始编译窗口较为简单,提供的编译环境不太友好,所以为了提高代码的编写效率,选择RStudio作为代码编译环境。

1.1.2.1  R语言的编译器

只使用R语言自带的GUI(Graphical User Interface,图形用户界面)难以进行方便快捷的操作,因此为了方便使用,可以使用免费的图形界面编辑器 RStudio。RStudio实质性的编程语言与R语言没有任何区别。但是相比R语言,RStudio拥有更友好的界面及更强的操作性。

1、 RStudio 的下载

可以从网站http://www.rstudio.com/products/rstudio/download/中获取相关资源后下载。要注意的是,商业版及专业版的RStudio编辑器是收费的,但是就本书内容而言,开源的RStudio就能够满足编程需求。

请同学们根据自身所使用的计算机操作系统(Linux、Mac OSX和Windows)选择系统支持的版本,自行下载安装,但要注意,在选择安装目录时,需要选择安装R的目录里面,以免发生RStudio无法找到R关联的问题。

安装 RStudio后,可从安装目录或者“开始”菜单栏中启动。

2、RStudio的编辑窗口

RStudio的操作窗口主要由菜单栏、快捷键工具栏、脚本编写窗口、环境管理窗口、代码命令行窗口及资源管理窗口构成。其中,脚本编写窗口、环境管理窗口、代码命令行窗口的位置,以及资源管理窗口的大小可通过拖动鼠标来改变。

首先介绍菜单栏的功能。菜单栏包含File(文件)、Edit(编辑)、Code(编码)、View(视图)、Plots(绘图)、Session(会话)、Build(搭建)、Debug(调试)、Profile(项目)、Tools(工具)及Help(帮助)菜单。

(1)File(文件)菜单提供了R脚本及工程的创建、打开与保存功能。

(2)Edit (编辑)菜单与普通的编辑菜单类似,提供代码的复制、粘贴等功能。

(3)Code (编码)菜单包含了简单的代码块创建、注释与取消注释、运行等功能。

(4)View(视图)菜单主要提供了各个窗口的切换及设置等功能。

(5)Plots(绘图)菜单只有图片产生时才可用,其功能其实与图1-20中的6部分中的Plots差不多。

(6)Session(会话)菜单提供了RStudio与R之间连接设置的功能,如重新连接R、终止R连接等。

(7)Build(搭建)菜单主要在RStudio中进行Package等开发时需要编译的情况下使用,普通的R脚本是不需要的。

(8)Debug(调试)菜单用于对RStudio中编程文件的调试。

(9)Profile(项目)菜单提供R脚本归总到项目的功能。

(10)Tools(工具)菜单提供了很多实用功能,主要有数据集的导入、Package的安装与升级、DOS形式的R命令行界面及全局设置。

(11)Help(帮助)菜单提供了R与RStudio的使用帮助。

这里介绍 Tools(工具)下的全局设置(Global Options)子菜单。全局设置(Global Options)子菜单提供了有关RStudio的一些基本的设置(General)有默认的文本编码模式,推荐使用UTF-8。Code提供了一些关于编码的外观等设置,如是否显示行号、“Tab”键的空格数等。Appearance用于设置RStudio的外观,如字体、大小主题等。Pane Layout可配置RStudio界面上各窗口的布局。Packages配置的是Packages下载镜像及一些与Packages开发相关的设置。Sweave与产生帮助文档相关。Spelling与编码拼写检查相关。Git/SVN可设置在RStudio中使用Git等版本控制程序。

快捷键工具栏提供了常用操作的工具按钮。

脚本编写窗口是R语言脚本文件的编辑区域。代码编辑区域上方提供了代码保存、运行光标所在行或选定区域的代码、运行整个脚本代码等功能的工具。

在环境管理窗口中可查看代码运行产生的工作变量、代码的运行记录及RStudio的相关连接。

代码命令行窗口与R的编辑窗口类似,主窗口上方的一些文字是刚运行R时出现的一些说明和指引,文字下的“>”符号便是R的命令提示符,在其后可输入命令。

资源管理窗口下的Files子窗口提供了对项目中的内容进行文件夹的创建、删除、重命名、复制、移动等操作,方便管理项目。Plots子窗口提供了图片的浏览、放大、导出与清理的功能。Packages子窗口提供了R包的安装、加载、更新等提作功能。而Help子窗口提供了函数的帮助文档的查找与展示的功能。

3、RStudio的常用快捷键

RSudio有一些常用快捷键,掌握这些快捷键可以提高编码效率。

(1)Cm-R:可以替代Run的功能,执行选中的多行或者光标所在单行的代码。

(2)Crl+Shift+N:创建空白文本。

(3)Ctrl+O:打开文件选择器。

(4)Ctrl+L:清除R命令行控制台的屏幕内容。

(5)Crl+Shift+R:在光标行插入section标签。

(6)Ctrl+Shift+C:将选择的程序行进行批量注释。

(7)Crl+W:关闭当前脚本文件。

1.1.2.2获取R语言的帮助

R语言提供了大量的帮助文档,若学会使用这些帮助文档,则有助于正确使用各种函数,提高编程能力。R语言的内置帮助系统提供了当前已安装的R包中所有函数的描述、使用方法、参数介绍、函数细节及相关的函数例子。

在命令窗口输入表1-1中列出来的命令即可查看帮助文档。

1-1 R语言的获取帮助命令

命令

功能

help.start()

打开帮助文档

help("plot") 或者 ?plot

查看plot函数的帮助(引号可以省略)

help.search("plot") 或者 ??plot

以plot为关键词搜索本地帮助文档

example("plot")

plot函数的使用示例(引号可以省略)

RSiteSearch("plot")

以plot为关键词搜索在线文档和邮件列表存档

apropos("plot",mode="function")

列出名称中含有plot的所有可用函数

data()

列出当前已加载包中所含的所有可用示例数据集

vignette()

列出当前已经安装的包中所有可能的vignette文档

vignette("plot")

为主题plot显示指定的vignette文档

而在RStudio中,资源管理窗口的Help子窗口则可以直接通过函数的输入来查看相关的帮助文档。

1.2.2.3了解R语言的工作空间

工作空间(Workspace)是R当前的工作环境,存储了用户定义的所有对象(向量、矩阵、列表、数据框、函数)。在RStudio中的环境管理窗口中可以直观地看到R的工作空间中存储的对象。

在一个R对话结束的时候,可以把当前工作空间保存到当前工作路径的镜像(.Rhistory文件)中,并在下一次启动RStudio的时候自动载入该镜像文件保存的工作空间。

当前工作路径(Working Directory)是指R用来读取文件和保存结果的默认路径。可以通过getwd函数来查看当前工作目录,也可以通过setwd函数设置当前工作路径。如果需要读取一个不在当前工作路径中的文件,则用户可以在调用语句中输入完整的文件路径,也可以更改当前工作路径,然后读取文件。

常见的用于管理工作空间的R语言命令如表1-2所示。

1-2 R的工作空间管理命令

命令

功能

Getwd()

显示当前的工作目录

setwd("new_path")

修改当前的工作目录为new_path

1s()

列出当前工作空间中的对象

rm(objectList)

移除(删除)一个或多个对象

rm(list=1s())

移除当前工作空间的所有对象,即清除R工作空间中的内存变量

help(options)

显示可用选项的说明

options()

显示或设置当前选项

history(n)

显示最近使用过的n个命令(默认值为25)

savehistory("myfile")

保存命令历史文件到myfile中(默认值为.Rhistory)

loadhistory("myfile")

载入一个命令历史文件(默认值为.Rhistory)

Save.image("myfile")

保存工作空间到文件myfile中(默认值为.RData)

save(objectlist,file="myfile")

保存指定对象到一个文件中

load("myfile")

读取一个工作空间到当前会话中(默认值为.RData)

q()

退出R,并会询问是否保存工作空间

1.1.3 使用R包

之前在介绍R语言的时候,就提及R的优势主要体现在其软件包生态系统上,即常说的R包。截至2017年10月,R已提供11601个包供用户免费安装加载,具体的R包在官网(https://cran.r-project.org/web/packages/available_packages_by_name.html)上。这些R包提供了涉及各个领域的强大的功能,包括数据读取、可视化绘图、计算统计等。正因为R包的跨度非常大,所以R语言如此流行。

1.1.3.1认识R包

R包(Package)是R函数、数据、预编译代码以一种定义完善的格式组成的集合。而R包储存的文件夹称为库(Library)。可以通过 .libPaths 函数进行库的路径查询,而library函数不仅可以显示库中有哪些包,还可以载入所下载的包,进而在会话中使用包,如下代码所示。

>.libPaths()

[1]"C:/2rogramFiles/R/R-3.4.2/1ibrary"

library()

通过R包的查询,同学们可以看到R语言自带的一系列R包(base、datasets、utilsgrDevices、graphics、stata 及 methods)。这些包提供了各种各样的函数和内置数据集。其他的R包则需要自行安装加载。

1.1.3.2 安装与加载R 包

要使用R包里的函数必须先加载相应的R包。可以通过install.packages函数来下载和安装包,然后通过library函数加载相应的包,如下代码所示。

>install.packages('nnet')

Installing package into 'c:/Users/tipdm/Documents/R/win-library/3.4’(as 'lib' is unspecified)

trying URL 'https://cran.rstudio.ccm/bin/windows/contrib/3.4/nnet 7.3-12.zip’

Content type ‘application/zip' length 134954 bytes (131 KB)

downloaded 131 KB

package 'nnet' successfully unpacked and MD5 sums checked

The downloaded binary packages are in

C:\Users\tipdm\AppData\Local\Temp\Rtmps 3xg7\downloaded_packages

>library(nnet)

还可以通过RStudio的图形界面来实现包的加载。

单击“Install”按钮,在弹出安装对话框后,可以选择安装来源和安装路径,这与install.packages 函数效果一致。单击“Update”按钮则可对已经安装的包进行更新。再勾选R包前面的复选框即可加载相应的包,效果同library函数。

1.1.3.3 掌握常用的R包

在数据分析中,常用的R包可划分为空间数据分析类、机器学习与统计学习类、多元统计类、药物动力学数据分析类、计量经济类、金融分析类、并行计算类和数据库访问类。比如,机器学习与统计学习类就包含实现分类、聚类、关联规则、时间序列分析等功能的R包。加载不同的R包能够实现相应的数据挖掘功能,如表1-3所示。

1-3 R数据挖掘相关包

功能

函数及加载包

分类与预测

nnet函数需要加载BP神经网络nnet包

randomForest函数需要加载随机森林randomForest包

svm函数需要加载e1071包

tree函数需要加载CRAT决策树tree包等

聚类分析

hclust函数、kmeans函数在stats包中

关联规则

apriori函数需要加载arules包

时间序列

arima函数需要加载forecast、tseries包

分类与预测是数据挖掘领域研究的主要问题之一,而分类器作为解决问题的工具一直是研究的热点。常用的分类器有神经网络、随机森林、支持向量机、决策树等。这些分类器都有各自的性能特点。

nnet包执行单隐层前馈神经网络,nnet函数的主要参数有隐层结点数(size)、结点权重(weights)、最大迭代次数(maxit)等。为了达到最好的分类效果,需要根据经验或者不断地尝试来确定。

随机森林分类器利用基于Breiman随机森林理论的R语言软件包randomForest中的randomForest函数来实现,需要设置3个主要的参数:森林中决策树的数量(tree)、内部结点随机选择属性的个数(mtry)及终结点的最小样本数(nodesize)。

支持向量机(Support Vector Machine, SVM)分类器采用R语言软件包e1071实现。该软件包是以中国台湾大学林智仁教授的libsvm源代码为基础开发的。svm函数提供了与LIBSVM的接口,主要参数有类型(type,“C”实现支持向量机分类,“eps-regression实现支持向量机回归)、核函数(kernel)。SVM包含了4种主要的核函数:线性核函数(Linear)、多项式核函数(Polynomial)、径向基核函数(RBF)及Sigmoid核函数。而径向某核函数支持向量机包含两个重要的参数:惩罚参数(Cost)和核参数(Gamma)。 tune数可以对两者进行网格寻优(Grid-search),以确定最优值。

常用的聚类方法有系统聚类与k-means聚类。系统聚类可以使用hclust函数实现,参数有距离矩阵(d)和系统聚类方法(method),其中,距离矩阵可以使用dist函数求得。常用的系统聚类方法有最短距离法、最长距离法、类平均法、中间距离法、重心法及Ward法。k-means聚类法是一种快速聚类法,可以使用kmeans函数实现,涉及的主要参数为聚类数。

系统聚类法和k-means 聚类法的不同之处在于:系统聚类对不同的类数产生一系列的聚类结果,而 k-means聚类法只能产生指定类数的聚类结果。具体类数的确定,离不开实践经验的积累。有时也可借助系统聚类法,以一部分样本为对象进行聚类,其结果作为k-means聚类法确定类数的参考。

作为数据挖掘中的一个独立课题,关联规则用于从大量数据中挖掘出有价值的数据项之间的关系,常用的有arules包中的Apriori算法。使用Apriori算法生成规则前,要把数据转换为transcation格式,这可以通过as函数实现,其中涉及的参数列表(parameter)用于自定义最小支持度与置信度。

时间序列分析是根据系统观测得到的时间序列数据,通过曲线拟合及参数估计来建立数学模型的理论和方法。进行时间序列分析时,可以使用ts函数将数据转换成时间序列格式;模型拟合可以通过arima函数实现,涉及的主要参数有order(自回归项数、滑动平均项数及使时间序列成为平稳序列的差分阶数)、seasonal(序列表现出季节性趋势时需要用到,除了上述order内容外,还有季节周期period)、method(参数估计方法,“CSS”为条件最小二乘法,“ML”为极大似然法)等。

1.1.4 R包的内置数据集

数据集及数据集的描述如表1-4所示:

表1-4 数据集及数据集的描述

数据集

描述

airquality

纽约1973年5~9月每日空气质量评估

attenu

多个观测站观测到的加利福尼亚的23次地震数据

beaver1(beavers)

一只海狸每10min的体温数据,共114条数据

beaver2(beavers)

另一只海狸每10min的体温数据,共100条数据

cars

20世纪20年代,汽车的速度与刹车距离

chickwts

不同饮食种类对小鸡体重的影响

esoph

喝酒、吸烟对食管癌的影响

faithful

一个间歇泉的暴发时间和持续时间

InsectSprays

不同杀虫剂对昆虫数目的影响

iris

EdgarAnderson记录的3种鸢尾花形态数据

LifeCycleSavings

50个国家的存款率

Longley

强共线性的宏观经济数据

mtcars

32辆汽车的11个指标数据

PlantGrowth

3种处理方式对植物产量的影响

Pressure

温度和气压

Puromycin

两种细胞中辅因子浓度对酶促反应的影响

quakes

1000次地震观测数据(震级>4)

sleep

两种药物的催眠效果

stackloss

化工厂将氨转为硝酸的数据

swiss

瑞士生育率和社会经济指标

ToothGrowth

VC剂量和摄入方式对豚鼠牙齿的影响

Trees

树木形态指标

USArrests

美国50个州的4个犯罪率指标

USJudgeRating

43名律师的12个评价指标

warpbreaks

织布机异常数据

women

15名美国女性的身高和体重情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值