R语言学习笔记

本文主要是自己在学习和使用R语言时对于一些不太熟悉的内容做一下记录,记录会随着学习和工作中遇到的问题而增加。


Start: Hello World

首先,用Hello world做个开头吧。

print("Hello World")

1 R语言的开发环境

1.1 下载R-CARN

R可以在CRAN([https://cran.r-project.org/][1])免费下载和使用。

1.2 工作空间

工作空间(workspace)就是当前R的工作环境,它储存着所有用户定义的对象(向量、矩阵、函数、数据框、列表等)。在一个R会话结束时,你可以将当前工作空间保存到一个镜像中,并在下次启动R时载入它,即可回到之前的工作状态中。

#设置当前工作空间
> getwd()   #显示当前的工作空间目录
[1] "C:/Users/yigeng/RWorkSpace"
> dir.create("helloworld")    #在当前目录下创建一个文件夹
> setwd("C:\\Users\\yigeng\\RWorkSpace\\helloworld")    #设置当前工作目录
> options()    #显示当前工作空间设置
> x<-(1,2,3)    #创建一个向量x
> q()    #退出 提示是否保存工作空间,点击保存

#返回工作空间
> setwd("C:\\Users\\yigeng\\RWorkSpace\\helloworld")
> load(".RData")    #读取一个工作空间到当前目录中
> x
[1] 1 2 3    #看到之前工作空间中的数据x,说明工作空间加载正确 
注1:在Windows下输入文件目录可以用setwd("C:\\Users\\yigeng\\RWorkSpace"),也可以用setwd("C:/Users/yigeng/RWorkSpace")。
注2:setwd()不会自动创建一个不存在的目录,所以先要用dir.create()创建目录。

1.3 包

用install.packages()可以看到所有的包的列表。
安装包

> install.packages("package_name")    #package_name为要安装的包名

载入包

> library(package_name)    #使用包之前要先载入

查看包的帮助文档

> help(package="package_name")

1.4 帮助文档

> help.start()    #打开帮助文档首页
> help("function_name")
> ?function_name    #同上,查看函数的帮助
> example("function_name")    #函数的使用示例
> help.search("key_word")
> ??key_word    #以key_word为关键词搜索本地帮助文档

2 数据结构

2.1 向量(Vectors)

2.1.1 动态增加向量内容

film_list <- c("A New Hope", "The Empire Strikes Back", "Return of the Jedi")
copy_list<-vector()
for(i in 1:length(film_list )) {
   copy_list[i] <- film_list[i]
 }
> copy_list
[1] "A New Hope"              "The Empire Strikes Back" "Return of the Jedi"     

2.2 矩阵(Matrices)

2.2.1 创建矩阵

new_hope <- c(460.998, 314.4)
empire_strikes <- c(290.475, 247.900)
return_jedi <- c(309.306, 165.8)
The_Phantom_Menace <- c(474.5, 552.5)
Attack_of_the_Clones <- c(310.7, 338.7)
Revenge_of_the_Sith <- c(380.3, 468.5)
box_office <- c(new_hope, empire_strikes, return_jedi, The_Phantom_Menace, Attack_of_the_Clones, Revenge_of_the_Sith)
all_wars_matrix <- matrix(box_office,byrow=TRUE,nrow=6)
region <- c("US", "non-US")
titles <- c("A New Hope", "The Empire Strikes Back", "Return of the Jedi", "The Phantom Menace", "Attack of the Clones", "Revenge of the Sith")
colnames(all_wars_matrix) <- region
rownames(all_wars_matrix) <- titles
> all_wars_matrix
                             US non-US
A New Hope              460.998  314.4
The Empire Strikes Back 290.475  247.9
Return of the Jedi      309.306  165.8
The Phantom Menace      474.500  552.5
Attack of the Clones    310.700  338.7
Revenge of the Sith     380.300  468.5

这样就创建了一个3*2的矩阵,记录了《星球大战》六部曲在北美和非北美地区的票房。

2.2.2 矩阵中提取元素

> all_wars_matrix[2,]
     US  non-US 
290.475 247.900 
> all_wars_matrix[1:3,2]
             A New Hope The Empire Strikes Back      Return of the Jedi 
                  314.4                   247.9                   165.8 

2.2.3 两个矩阵相除

> ticket_prices_matrix    #有一个票价矩阵
                         US non-US
A New Hope              5.0    5.0
The Empire Strikes Back 6.0    6.0
Return of the Jedi      7.0    7.0
The Phantom Menace      4.0    4.0
Attack of the Clones    4.5    4.5
Revenge of the Sith     4.9    4.9
> visitors <- all_wars_matrix / ticket_prices_matrix    #票房和票价相除,可以得到观众数量
> visitors 
                               US    non-US
A New Hope               92.20000  62.88000
The Empire Strikes Back  48.41667  41.31667
Return of the Jedi       44.18571  23.68571
The Phantom Menace      118.62500 138.12500
Attack of the Clones     69.04444  75.26667
Revenge of the Sith      77.61224  95.61224
> 

2.3 因子(Factors)

2.4 数据框(Data frames)

矩阵主要用于存储相同数据类型的数据,数据框可以将不同类型的数据存储到一起。

2.4.1 数据框排序

> mtcars_sample <- mtcars[2:6,1:5]    #mtcars数据集中提取几个样本
> mtcars_sample
                   mpg cyl disp  hp drat
Mazda RX4 Wag     21.0   6  160 110 3.90
Datsun 710        22.8   4  108  93 3.85
Hornet 4 Drive    21.4   6  258 110 3.08
Hornet Sportabout 18.7   8  360 175 3.15
Valiant           18.1   6  225 105 2.76
> mtcars_sorted <- mtcars_sample[order(mtcars_sample$mpg,decreasing = F),]    #mtcars_sample中的记录按照mpg排序,将排序后的数据框存储到mtcars_sorted中来
> mtcars_sorted
                   mpg cyl disp  hp drat
Valiant           18.1   6  225 105 2.76
Hornet Sportabout 18.7   8  360 175 3.15
Mazda RX4 Wag     21.0   6  160 110 3.90
Hornet 4 Drive    21.4   6  258 110 3.08
Datsun 710        22.8   4  108  93 3.85
> 

2.5 列表(Lists)

3 逻辑运算

3.1 关系运算

3.1.1 向量的逻辑运算

> linkedin <- c(16, 9, 13, 5, 2, 17, 14)
> linkedin > 15
[1]  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE
> j <- c(linkedin > 15)
> j
[1]  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE

向量和数字作比较,生成一逻辑向量,矩阵和数字作比较的结果一样,生成逻辑矩阵。

4 控制流与函数

5 画图

5.1 图形组合

R语言中,在par()函数中使用图形参数mfrow=c(nrows,ncols)来创建按行填充的、行数为nrows、列数为ncols的图形矩阵。用nfcol=c(nrows, ncols)可以创建按列填充矩阵。

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)

如上图所示,生成了一个2*2的图形矩阵。
还可以使用layout()来做布局,调用形式为layout(mat, widths, heights),其中mat为一个矩阵,主要用该矩阵设置窗口的划分,矩阵的0元素表示该位置不画图,非0元素必须包括从1开始的连续的整数值,比如:1……N,按非0元素的大小设置图形的顺序。
例如矩阵为:matrix(c(1,1,2,3,4,3),3,2,byrows=TRUE)得到一个三行两列的矩阵,形式如下:

> matrix(c(1,1,2,3,4,3),3,2,byrow=TRUE)
     [,1] [,2]
[1,]    1    1
[2,]    2    3
[3,]    4    3

那么我们得到如下形式的output device:

widths和heights两个参数用来控制每幅图形的大小。
widths = 各列宽度值组成的一个向量。
heights = 各行高度值组成的一个向量。

attach(mtcars)
layout(matrix(c(1, 1, 2, 3), 2, 2, byrow = TRUE)
       , widths = c(3, 1)
       , heights = c(1, 2))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)

输出结果如上图所示,通过height的控制第1行中图形的高度是第2行中图形高度的二分之一。通过widths的控制右下角图形的宽度是左下角图形宽度的三分之一。
还有一种更精细的图形布局控制,用par()中的fig参数来控制,fig是一个向量。先看一下代码示例:

opar <- par(no.readonly = TRUE)
par(fig = c(0, 0.8, 0, 0.8))    #设置散点图
plot(mtcars$wt, mtcars$mpg, xlab = "Miles Per Gallon", ylab = "Car Weight")

par(fig = c(0, 0.8, 0.55, 1), new = TRUE)    #在上方添加箱线图
boxplot(mtcars$wt, horizontal = TRUE, axes = FALSE)

par(fig = c(0.65, 1, 0, 0.8), new = TRUE)    #在右侧添加箱线图
boxplot(mtcars$mpg, axes = FALSE)
mtext("Enhanced Scatterplot", side = 3, outer = TRUE, line = -3)
par(opar)

代码运行结果如下:

要理解这幅图的绘制原理,请试想完整的绘图区域:左下角坐标为(0,0),而右上角坐标为(1,1)。

上图是一幅示意图。参数fig=的取值是一个形如c(x1, x2, y1, y2)的数值向量。第一个fig=将散点图设定为占据横向范围00.8,纵向范围00.8。上方的箱线图横向占据00.8,纵向0.551。右侧的箱线图横向占据0.651,纵向00.8。fig=默认会新建一幅图形,所以在添加一幅图到一幅现有图形上时,请设定参数new=TRUE。
这里将参数选择为0.55而不是0.8,这样上方的图形就不会和散点图拉得太远。

参考资料

DataCamp
R语言实战/(美)Kabacooff,R.I.著

posted on 2016-06-24 16:24  Eaton  阅读(1537)  评论(0编辑  收藏  举报

导航