《R语言实战》- 牛国庆

[toc]

第一章

1.3.2 R中帮助函数

R中用于管理R工作空间的函数

函数setwd()不会自动创建一个不存在的目录。如果必要的话,可以使用函数dir.create()来创建新目录,然后使用setwd() 将工作目录指向这个新目录。

1.3.4 输入和输出

1.输入

关键词:

  • 如何运行一个R脚本。

函数source(“filename”)可在当前会话中执行一个脚本。如果文件名中不包含路径,R将假设此脚本在当前工作目录中。举例来说,source(“myscript.R”)将执行包含在文件myscript.R中的R语句集合。

2.文本输出

关键词:

  • 所见即所得,如何保存在运行栏输出的内容。

函数sink(“filename”)将输出重定向到文件filename中。默认情况下,如果文件已经存在,则它的内容将被覆盖。使用参数append=TRUE可以将文本追加到文件后,而不是覆盖它。参数split=TRUE可将输出同时发送到屏幕和输出文件中。不加参数调用命令sink()将仅向屏幕返回输出结果。

3.图形输出
R包

关键词:

  • 如何知道你的R包安装在什么地方?

  • 如何设置权限,让R包安装在指定位置?

  • 函数.libPaths()能够显示库所在的位置,函数library()则可以显示库中有哪些包。

  • 命令search()可以查出哪些包已加载并可使用。

  • 命令install.packages()安装包

  • 命令library()加载包

  • 命令help(package=”package_name”)可以输出某个包的简短描述以及包中的函数名称和数据集名称的列表。

    使用函数help()可以查看其中任意函数或数据集的更多细节。

R语言中常见的错误
1.5 批处理 (X)
1.6 将输出用于输入:结果的重用

键入summary(lmfit)将显示分析结果的统计概要,plot(lmfit)将生成回归诊断图形,
而语句cook<-cooks.distance(lmfit)将计算和保存影响度量统计量,plot(cook)对其绘图。要在新的车身重量数据上对每加仑行驶的英里数进行预测,不妨使用predict(lmfit, mynewdata)。

1.8 示例实践
  • (1) 打开帮助文档首页,并查阅其中的“Introduction to R” 。

  • (2) 安装vcd包(一个用于可视化类别数据的包,你将在第11章中使用) 。

  • (3) 列出此包中可用的函数和数据集。

  • (4) 载入这个包并阅读数据集Arthritis的描述。

  • (5) 显示数据集Arthritis的内容(直接输入一个对象的名称将列出它的内容) 。

  • (6) 运行数据集Arthritis自带的示例。

    如果不理解输出结果,也不要担心。

    它基本上显示

  • 了接受治疗的关节炎患者较接受安慰剂的患者在病情上有了更多改善。

  • (7) 退出。

help.start()
install.packages("vcd")
help(package="vcd")
library(vcd)
help(Arthritis)
Arthritis
example(Arthritis)
plot(Arthritis)

第二章 创建数据集

2.1 数据集的概念

数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量。

2.2 数据结构
  • 一些定义

向量是一维数组,矩阵是二维数组,数组(array)与矩阵类似,但是维度可以大于2
2.2.1 向量
  • 向量是用于存储数值型、字符型或逻辑型数据的一维数组。

    执行组合功能的函数c()可用来创建向量。

    各类向量如下例所示:

a <- c(1, 2, 5, 3, 6, -2, 4)
b <- c("one", "two", "three")
c <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)

  • 这里,a是数值型向量,b是字符型向量,而c是逻辑型向量。

    注意,单个向量中的数据必须拥有相同的类型或模式(数值型、字符型或逻辑型)。

    同一向量中无法混杂不同模式的数据。

  • 通过在方括号中给定元素所处位置的数值,我们可以访问向量中的元素。

    例如, a[c(2, 4)] 用于访问向量a中的第二个和第四个元素。

    更多示例如下

a <- c("k", "j", "h", "a", "c", "m")
> a[3]
[1] "h"
a[c(1, 3, 5)]
[1] "k" "h" "c"
a[2:6]
[1] "j" "h" "a" "c" "m"

  • 最后一个语句中使用的冒号用于生成一个数值序列,如a <- c(2:6)等价于a <- c(2, 3, 4, 5, 6)。

2.2.2 矩阵

矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。可通过函数matrix()创建矩阵。一般使用格式为:

myymatrix <- matrix(vector, nrow=number_of_rows, ncol=number_of_columns, byrow=logical_value, dimnames=list(char_vector_rownames, char_vector_colnames))

  • 其中vector包含了矩阵的元素,nrow和ncol用以指定行和列的维数,dimnames包含了可选的、以字符型向量表示的行名和列名。

    选项byrow则表明矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE),默认情况下按列填充。

    代码清单2-1中的代码演示了matrix

    函数的用法。

创建矩阵

y<- matrix(1:20,nrow = 5,ncol = 4) ##创建一个5x4的矩阵
y

##按行填充的2x2矩阵
cells<- c(1,26,24,68)
rnames<- c("R1","R2")
cnames<- c("C1","C2")
mymatrix<- matrix(cells,nrow = 2,ncol = 2,byrow = T,dimnames = list(rnames,cnames))
mymatrix

##按列填充的2x2矩阵
mymatrix<- matrix(cells,nrow = 2,ncol = 2,byrow = F,dimnames = list(rnames,cnames))
mymatrix

##矩阵下标的使用
x <- matrix(1:10, nrow=2,ncol=5)
x
x[2,] ###第二行
x[,2] ###第二列
x[1,4] ###第一行第四列
x[1, c(4,5)] ###第一行第四、五列

2.2.3 数组
  • 数组(array)矩阵类似,但维度可以大于2,可通过函数array创建,形式如下: myarray <- array(vector,dimensions, dimnames)

    • 其中vector包含了数组中的数据,

      dimensions是一个数值型向量,给出了各个维度下标的最大值,而dimnames是可选的、各维度名称标签的列表。

  • 示例

    ## 创建一个数组
    dim1 <- c("A1", "A2")
    dim2 <- c("B1", "B2", "B3")
    dim3 <- c("C1", "C2", "C3", "C4")
    z <- array(1:24, c(2, 3, 4), dimnames=list(dim1, dim2, dim3)) ### 2行3列4个表
    z

    2.2.4 数据框
  • 数据框可通过函数data.frame()创建:
    mydata<- data.frame(co11,co12,co13,…)

  • 其中的列向量col1、col2、col3等可为任何类型(如字符型、数值型或逻辑型)。

    每一列的名称可由函数names指定。

    代码清单2-4清晰地展示了相应用法。

## 创建一个数据框

patientID<- c(1,2,3,4)
age<- c(25,34,28,52)
diabetes <- c("Type1", "Type2", "Type1", "Type1")
status <- c("Poor", "Improved", "Excellent", "Poor")
data <- data.frame(patientID, age, diabetes, status)
data

选取数据框中的元素

data[1:2]#第一列和第二列(第一种方法)
data[3:4]#第三列和第四列

data[c("diabetes","status")] #(第二种方法)

data$age #第三种方法(提取data数据框中的变量age)

##
table(data$diabetes, data$status)# 也可以生成糖尿病类型变量diabetes和病情变量status的列联表
##但是在每个变量名前都键入一次data$比较麻烦,可以联合使用函数attach()和detach()或单独使用函数with()来简化代码

函数attach()、detach()、和with()

这几个函数使用的比较少,仅做了解,不用再次学习

函数attach()可将数据框添加到R的搜索路径中;函数detach()将数据框从搜索路径中移除。值得注意的是, detach()并不会对数据框本身做任何处理。这句是可以省略的,但其实它应当被例行地放入代码中,因为这是一个好的编程习惯。

#实例:
summary(mtcars$mpg)
plot(mtcars$mpg, mtcars$disp)
plot(mtcars$mpg, mtcars$wt)
#以上代码可写成
attach(mtcars)
summary(mpg)
plot(mpg, disp)
plot(mpg, wt)
detach(mtcars)

###当名称相同的对象不止一个时,这种方法的局限性就很明显了,参考以下代码
mpg <- c(25, 36, 47)
attach(mtcars)
plot(mpg, wt) #会报错
mpg

###上面代码会出错的原因:在数据框mtcars被绑定(attach)之前,你们的环境中已经有了一个名为mpg的对象。在这种情况下,原始对象将取得优先权,这与你们想要的结果有所出入。由于mpg中有3个元素而disp中有32个元素,故plot语句出错。函数attach()和detach()最好在你分析一个单独的数据框,并且不太可能有多个同名对象时使用。

##可以使用函数with(),完成上例:
with(mtcars, {
print(summary(mpg))
plot(mpg, disp)
plot(mpg, wt)
})
## 这种情况下,花括号{}之间的语句都针对数据框mtcars执行,这样就无需担心名称冲突了。如果仅有一条语句(例如summary(mpg)) ,那么花括号{}可以省略。
## 但是函数with()的局限性在于,赋值仅在此函数的括号内生效。参考以下代码:

with(mtcars, {
stats <- summary(mpg)
stats
})

stats

##如果你需要创建在with()结构以外存在的对象,使用特殊赋值符<<-替代标准赋值符(<-)即可,它可将对象保存到with()之外的全局环境中。这一点可通过以下代码阐明:
with(mtcars, {
nokeepstats <- summary(mpg)
keepstats <<- summary(mpg)
})
nokeepstats
keepstats

2.实例标识符

这里的实例标识目前正在不断的弱化,所以我们要知道有列名这一回事,也可以通过这一名称来选择对应的行,做一般了解,能看懂简单使用即可,后面使用dplyr清洗数据就用普通的列来做了。

  • 在病例数据中,病人编号(patientID)用于区分数据集中不同的个体。

    在R中,实例标识

    符(case identifier)可通过数据框操作函数中的rowname选项指定。

    例如,语句:

    patientdata <- data.frame(patientID, age, diabetes,status,row.names=patientID)

  • 将patientID指定为R中标记各类打印输出和图形中实例名称所用的变量

2.2.5 因子 (精读 理解)
  • 变量可归结为名义型、有序型或连续型变量。

  • 类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)

代码清单-因子的使用

### 因子-代码因子的使用
patientID <- c(1, 2, 3, 4)
age <- c(25, 34, 28, 52)
diabetes <- c("Type1", "Type2", "Type1", "Type1")
status <- c("Poor", "Improved", "Excellent", "Poor")
diabetes <- factor(diabetes)
status <- factor(status, order=TRUE)
patientdata <- data.frame(patientID, age, diabetes, status)
str(patientdata) ###显示对象的结构
summary(patientdata) ###显示对象的统计概要

首先,以向量的形式输入数据➊。然后,将diabetes和status分别指定为一个普通因子和一个有序型因子。最后,将数据合并为一个数据框。函数str(object)可提供R中某个对象(本例中为数据框)的信息➋。它清楚地显示diabetes是一个因子,而status是一个有序型因子,以及此数据框在内部是如何进行编码的。注意,函数summary()会区别对待各个变量➌。它显示了连续型变量age的最小值、最大值、均值和各四分位数,并显示了类别型变量diabetes和status(各水平)的频数值。

2.2.6 列表 (精读 理解)

这部分要好好度,尤其是如何提取list中的对象,用于保存和绘图

列表(list)是R的数据类型中最为复杂的一种。一般来说,列表就是一些对象(或成分,component)的有序集合。列表允许你整合若干(可能无关的)对象到单个对象名下。

代码清单:创建一个列表

g <- "My First List"
h <-c(25,26,18,39)
j <- matrix(1:10, nrow=5)
k <- c("one", "two", "three")
mylist <- list(title=g, ages=h, j, k) # 创建列表
mylist #输出整个列表

mylist[[2]] #输出第二个成分
mylist[["ages"]]

  • mylist[[2]]和mylist[[“ages”]]均指那个含有四个元素的向量。

    对于命名成分,

    mylist$ages也可以正常运行。

2.3 数据的输入
2.3.1 使用键盘输入数据 (学会)

有两种常见的方式:用R内置的文本编辑器和直接在代码中嵌入数据。

2.3.2 从带分隔符的文本文件导入数据 (精读 理解)
  • 可以使用read.table()从带分隔符的文本文件中导入数据

    mydataframe <- read.table(file, options

  • file是一个带分隔符的ASCII文本文件,options是控制如何处理数据的选项

函数 read.table()的选项

##以一个名为studentgrades.csv的文件,为例
grades <- read.table("studentgrades.csv",header = T,sep = ",",row.names = 1)
grades
str(grades)
##还可以用colClasses选项去对每一列都指定一个类(比如说,逻辑型、数值型、字符型或因子型) 。
grades <- read.table("studentgrades.csv", header=T,row.names="StudentID", sep=",",colClasses=c("character", "character", "character", "numeric", "numeric", "numeric"))
grades
str(grades)

#函数read.table()还可以有很多微调方法,可以查阅help(read.table)

2.3.3 导入excel数据 (了解)
  • 读取一个Excel文件的最好方式,就是在Excel中将其导出为一个逗号分隔文件(csv)。

  • 还有其他数据导入方法

2.4 数据集的标注

为了使结果更易解读,数据分析人员通常会对数据集进行标注。这种标注包括为变量名添加描述性的标签,以及为类别型变量中的编码添加值标签。例如,对于变量age,你可能想附加一个描述更详细的标签“Age athospitalization (in years)” (入院年龄)。对于编码为1或2的性别变量gender,你可能想将其关联到标签“male”和“female”上。

2.4.1 变量标签

将变量标签作为变量名

2.4.2 值标签
  • 函数factor()可为类别型变量创建值标签。

    继续上例,假设你有一个名为gender的变量,其中1表示男性,2表示女性。

    你可以使用代码:

    patientdata$gender <- factor(patientdata$gender,
    levels = c(1,2),
    labels = c("male", "female"))

  • 这里levels代表变量的实际值,而labels表示包含了理想值标签的字符型向量。

2.5 处理数据对象的实用函数 (精读 理解)

再次阅读必须全部学会,全部会用

第三章 图形初阶

这里我来回答你们的问题,为什么ggplot出图如此流行,但却还要学习base包呢?从现实的角度来讲,许多咱们常用的数据分析包都还是基础包出图的,比如vegan等,许多图形都有基础包绘制额版本,甚至有的图形只能用基础包来绘制,比如和弦图。

本章内容

  • 图形的创建和保存

  • 自定义符号、线条、颜色和坐标轴

  • 标注文本和标题

  • 控制图形维度

  • 组合多个图形

3.1 使用图形 (学会)

attach(mtcars) #绑定数据框
plot(wt, mpg) # 生成散点图
abline(lm(mpg~wt))
title("Regression of MPG on Weight") #为图形添加一条最优拟合曲线
detach(mtcars) #解绑了数据框

#以下代码会将图形保存到当前工作目录中名为mygraph.pdf的PDF文件中
pdf("mygraph.pdf")
attach(mtcars)
plot(wt, mpg)
abline(lm(mpg~wt))
title("Regression of MPG on Weight")
detach(mtcars)
dev.off()

  • 通过执行如plot()、hist()(绘制直方图)或boxplot()这样的高级绘图命令来创建一幅新图形时,通常会覆盖掉先前的图形。

    如何才能创建多个图形并随时查看每一个呢?

    下面有几种方法

    ###创建多个图形并随时可以查看
    #第一种方法可以在创建一幅新图形之前打开一个新的图形窗口:
    dev.new()
    #statements to create graph 1
    dev.new()
    #statements to create a graph 2
    etc.
    #第二种方法在Windows上,这个过程分为两步。在打开第一个图形窗口以后,勾选“历史” (History)→“记录” (Recording)。然后使用菜单中的“上一个” (Previous)和“下一个”(Next)来逐个查看已经绘制的图形。
    #第三种方法可以使用函数dev.new()、dev.next()、dev.prev()、dev.set()和dev.off()同时打开多个图形窗口, 并选择将哪个输出发送到哪个窗口中

3.2 一个简单的例子
  • 描述了病人对两种药物五个剂量水平上的响应情况。

    dose <- c(20, 30, 40, 45, 60)
    drugA <- c(16, 20, 27, 40, 60)
    drugB <- c(15, 18, 25, 31, 40)
    #使用以下代码可以创建一幅描述药物A的剂量和响应关系的图形
    plot(dose, drugA, type="b")

  • plot()是R中为对象作图的一个泛型函数 (它的输出将根据所绘制对象类型的不同而变化) 。

    本例中,plot(x, y, type=”b”)将x置于横轴,将y置于纵轴,绘制点集(x,y),然后使用线段将其连接。

    选项type=”b”表示同时绘制点和线。

    使用help(plot)可以查看其他选项。

3.3 图形参数 (学会)
  • 我们可以通过修改称为图形参数的选项来自定义一幅图形的多个特征(字体、 颜色、 坐标轴、标签) 。

    ```

    假设你想使用实心三角而不是空心圆圈作为点的符号,并且想用虚线代替实线连接这些点。可以使用以下代码完成修改:

    opar <- par(no.readonly=TRUE)

    par(lty=2, pch=17)

    plot(dose, drugA, type=”b”)

    par(opar)

    上面函数的解释:首个语句复制了一份当前的图形参数设置。第二句将默认的线条类型修改为虚线(lty=2)并将默认的点符号改为了实心三角(pch=17) 。然后我们绘制了图形并还原了原始设置

指定图形参数的第二种方法是为高级绘图函数直接提供optionname=value的键值对。这种情况下,指定的选项仅对这幅图形本身有效

plot(dose, drugA, type=”b”, lty=2, pch=17) #可生成与上图相同的图形

###### 3.3.1 符号和线条 (精读,记忆)

- 用于指定符号和线条类型的参数
![image](https://note.youdao.com/yws/public/resource/13eff81a2df147e61a55ff14860de848/xmlnote/475E45FE56914AC9BF07217C33619D59/2005)
- 选项pch=用于指定绘制点时使用的符号
![image](https://note.youdao.com/yws/public/resource/13eff81a2df147e61a55ff14860de848/xmlnote/39988BCFEE2A444AAD6C7B6431D3B92E/2011)
- 对于符号21~25,你还可以指定边界颜色(col=)和填充色(bg=)。
- 选项lty=用于指定想要的线条类型
![image](https://note.youdao.com/yws/public/resource/13eff81a2df147e61a55ff14860de848/xmlnote/2BD947CDE717433AA0FC202ECA04B741/2021)
- 综合以上选项,以下代码:

plot(dose, drugA, type=”b”, lty=3, lwd=3, pch=15, cex=2)

- 线条类型为点线,宽度为默认宽度的3倍,点的符号为实心正方形,大小为
默认符号大小的2倍

###### 3.3.2 颜色 (精读,记忆,理解)

- 用于指定颜色的参数
![image](https://note.youdao.com/yws/public/resource/13eff81a2df147e61a55ff14860de848/xmlnote/228BBC15228F49D4A9A7345C3C620739/2032)
- 可以通过颜色下标、颜色名称、十六进制的颜色值、RGB值或HSV值来指定颜色。
- 举例来说,col=1、col="white"、col="#FFFFFF"、col=rgb(1,1,1)和col=hsv(0,0,1)都是表示白色的等价方式。
- 函数rgb()可基于红-绿-蓝三色值生成颜色,而hsv()则基于色相-饱和度-亮度值来生成颜色.
- R中也有多种用于创建连续型颜色向量的函数, 包括rainbow()、heat.colors()、 terrain.colors()、topo.colors()以及cm.colors()。举例来说,rainbow(10)可以生成10种连续的“彩虹型”颜色。
- 对于创建吸引人的颜色配对,RColorBrewer特别受到欢迎。注意在第一次使用它之前先进行下载(install.packages("RColorBrewer"))。安装之后,使用函数brewer.pal(n,name)来创建一个颜色值的向量。比如说,以下代码:

library(RColorBrewer)
n <- 7
mycolors <- brewer.pal(n, “Set1”)
barplot(rep(1,n), col=mycolors)

- #上述代码表示从Set1调色板中抽取了7种用十六进制表示的颜色并返回一个向量
- #若要得到所有可选调色板的列表,输入brewer.pal.info;或者输入display.brewer.all()从而在一个显示输出中产生每个调色板的图形

- #多阶灰度色可使用基础安装所自带的gray()函数生成。这时要通过一个元素值为0和 1之间的向量来指定各颜色的灰度。gray(0:10/10)将生成10阶灰度色。试着使用以下代码:

n <- 10
mycolors <- rainbow(n)
pie(rep(1, n), labels=mycolors, col=mycolors)
mygrays <- gray(0:n/n)
pie(rep(1, n), labels=mygrays, col=mygrays)

###### 3.3.3 文本属性 (精读,记忆,理解)

- 用于指定文本大小的参数
![image](https://note.youdao.com/yws/public/resource/13eff81a2df147e61a55ff14860de848/xmlnote/FCD6D62E9D7043E1AC2318B18C33EA67/2059)
- 用于指定字体族、字号和字样的参数 ![image](https://note.youdao.com/yws/public/resource/13eff81a2df147e61a55ff14860de848/xmlnote/96839713FFC343999998EA1CE8193F9D/2065)
- 例子:

par(font.lab=3, cex.lab=1.5, font.main=4, cex.main=2)

拥有斜体、1.5倍于默认文本大小的坐标轴标签(名称),以及粗斜体、2倍于默认文本大小的标题。

###### 3.3.4 图形尺寸与边界尺寸 (学会)

- 用于控制图形尺寸和边界大小的参数
![image](https://note.youdao.com/yws/public/resource/13eff81a2df147e61a55ff14860de848/xmlnote/F36DE83B8FD142B2B074AF1E48028201/2079)
- 代码:

par(pin=c(4,3), mai=c(1,0.5, 1, 0.2))

- 代码清单:使用图形参数控制图形外观

dose  <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)

opar <- par(no.readonly=TRUE)
par(pin=c(2, 3))
par(lwd=2, cex=1.5)
par(cex.axis=.75, font.axis=3)
plot(dose, drugA, type=”b”, pch=19, lty=2, col=”red”)
plot(dose, drugB, type=”b”, pch=23, lty=6, col=”blue”, bg=”green”)
par(opar)

- #值得注意的是,通过par()设定的参数对两幅图都有效,而在plot()函数中指定的参数仅对那个特定图形有效。

##### 3.4 添加文本、自定义坐标轴和图例(学会,还要理解)

> 基础包绘图这部分往往是个性化最严重的的部分,所以要多花点心思记忆,理解学习。

- 除了图形参数,许多高级绘图函数(例如plot、hist、boxplot)也允许自行设定坐标轴和文本标注选项。
- 以下代码在图形上添加了标题(main) 、副标题(sub) 、坐标轴标
签(xlab、ylab)并指定了坐标轴范围(xlim、ylim) 。

plot(dose, drugA, type=”b”,
col=”red”, lty=2, pch=2, lwd=2,
main=”Clinical Trials for Drug A”,
sub=”This is hypothetical data”,
xlab=”Dosage”, ylab=”Drug Response”,
xlim=c(0, 60), ylim=c(0, 70))

###### 3.4.1 标题(类似图例,学会,还要理解)

- 可以使用title()函数为图形添加标题和坐标轴标签。调用格式为:

title(main=”main title”, sub=”subtitle”,
     xlab=”x-axis label”, ylab=”y-axis label”)

- 函数title()中亦可指定其他图形参数(如文本大小、字体、旋转角度和颜色) 。举例来说,以下代码将生成红色的标题和蓝色的副标题,以及比默认大小小25%的绿色x轴、y轴标签:

title(main=”My Title”, col.main=”red”,
sub=”My Subtitle”, col.sub=”blue”, xlab=”My X label”, ylab=”My Y label”, col.lab=”green”, cex.lab=0.75)

###### 3.4.2 坐标轴 (了解)

- 可以使用函数axis()来创建自定义的坐标轴,而非使用R中的默认坐标轴。其格式为:

axis(side, at=, labels=, pos=, lty=, col=, las=, tck=, …)

- 坐标轴选项
![image](https://note.youdao.com/yws/public/resource/13eff81a2df147e61a55ff14860de848/xmlnote/0CD8CEE0A053437597462BC21A4D18F5/2127)
![image](https://note.youdao.com/yws/public/resource/13eff81a2df147e61a55ff14860de848/xmlnote/67CF620BD51B410291002E28F6945FCB/2129)

- 自定义坐标轴的示例

x <- c(1:10)
y <- x
z <- 10/x
opar <- par(no.readonly=TRUE)

par(mar=c(5, 4, 4, 8) + 0.1)
plot(x, y, type=”b”,
    pch=21, col=”red”,
    yaxt=”n”, lty=3, ann=FALSE)
lines(x, z, type=”b”, pch=22, col=”blue”, lty=2)

axis(2, at=x, labels=x, col.axis=”red”, las=2)

axis(4, at=z, labels=round(z, digits=2),
    col.axis=”blue”, las=2, cex.axis=0.7, tck=-.01)

mtext(“y=1/x”, side=4, line=3, cex.lab=1, las=2, col=”blue”)

title(“An Example of Creative Axes”,
     xlab=”X values”,
     ylab=”Y=X”)

par(opar)

函数mtext()用于在图形的边界添加文本.

###### 3.4.3 参考线 (了解)

函数abline()可以用来为图形添加参考线。其使用格式为:
abline(h=yvalues, v=xvalues

abline(h=yvalues, v=xvalues
abline(h=c(1,5,7)
abline(v=seq(1, 10, 2), lty=2, col=”blue”)

以上代码表示在x轴为x为1、3、5、7、9的位置添加了垂直的蓝色虚线;在y为1、5、7的位置添加了水平实线。

###### 3.4.4 图例
当图形中包含的数据不止一组时,图例可以帮助你辨别出每个条形、扇形区域或折线各代表哪一类数据。可以使用函数legend()来添加图例,格式为:
legend(location, title, legend, ...)
- 图例选项
![image](https://note.youdao.com/yws/public/resource/13eff81a2df147e61a55ff14860de848/xmlnote/716D17BA6E7F4B108F05664CC518E48B/2162)

- 例子:依剂量对比药物A和药物B的响应情况

dose  <- c(21, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)

opar <- par(no.readonly=TRUE)
par(lwd=2, cex=1.5, font.lab=2)  ##增加线条、文本、符号、标签的宽度或大小

plot(dose, drugA, type=”b”,
    pch=15, lty=1, col=”red”, ylim=c(0, 60),
    main=”Drug A vs. Drug B”,
    xlab=”Drug Dosage”, ylab=”Drug Response”)

lines(dose, drugB, type=”b”,
     pch=17, lty=2, col=”blue”)

abline(h=c(30), lwd=1.5, lty=2, col=”gray”) ###以上代码绘制图形

library(Hmisc)
minor.tick(nx=3, ny=3, tick.ratio=0.5)  ##  添加次要刻度线

legend(“topleft”, inset=.05, title=”Drug Type”, c(“A”,”B”),
      lty=c(1, 2), pch=c(15, 17), col=c(“red”, “blue”))  ## 添加图例
par(opar)

###### 3.4.5 文本标注 (学会)

我们可以通过函数text()和mtext()将文本添加到图形上。text()可向绘图区域内部添加文本,而mtext()则向图形的四个边界之一添加文本。使用格式分别为:

text(location, “text to place”, pos, …)
mtext(“text to place”, side, line=n, …)

- 函数text()和mtext()的选项
![image](https://note.youdao.com/yws/public/resource/13eff81a2df147e61a55ff14860de848/xmlnote/13B7E12C749C4A27A2D35452BC025357/2178)
- 其他常用的选项有cex、col和font(分别用来调整字号、颜色和字体样式) 。
- 除了用来添加文本标注以外,text()函数也通常用来标示图形中的点。我们只需指定一系列的x、y坐标作为位置参数,同时以向量的形式指定要放置的文本。示例:

attach(mtcars)
plot(wt, mpg,
    main=”Mileage vs. Car Weight”,
    xlab=”Weight”, ylab=”Mileage”,
    pch=18, col=”blue”)
text(wt, mpg,
    row.names(mtcars),
    cex=0.6, pos=4, col=”red”)
detach(mtcars)

###### 3.4.6 数学标注 (不用学)

##### 3.5 图形的组合 (学会组合)

> 就像我之前绘制ROC曲线那样,基础包做的比较成熟,所以我直接使用基础包完成的组图。

- R中使用函数par()或layout()可以容易地组合多幅图形为一幅总括图形。
- 可以在par()函数中使用图形参数mfrow=c(nrows,ncols)来创建按行填充的、行数为nrows、列数为ncols的图形矩阵。
- 或者可以使用mfcol=c(nrows,ncols)按列填充矩阵。
- 下面例子是创建4幅图,且按照2行2列排列

attach(mtcars)
opar <- par(no.readonly=TRUE)
par(mfrow=c(2,2))
plot(wt,mpg, main=”Scatterplot of wt vs. mpg”)
plot(wt,disp, main=”Scatterplot of wt vs. disp”)
hist(wt, main=”Histogram of wt”)
boxplot(wt, main=”Boxplot of wt”)
par(opar)
detach(mtcars)
```

评语

R语言实战这前三章对于R基础的学习非常重要,本篇学习笔记也确实抓到了要学习的点,很聪明了去除了一些不必要学习的内容。通过比对书本,我发现这些我们今后要用到的知识都在这里的。

但是这些只是不是一遍就可以学会并使用的,需要反复学习三次,在后续的重复学习中药在R.Rmd中做笔记,在运行的过程中理论和实践结合。

(0)

相关推荐