博文介绍了R的入门常用知识,包括R软件的下载、安装;宏包的安装于调用;帮助文档的使用;基本的查询;常见的数学运算;常用的五种数据结构: Vectors(向量) 、Matrices(矩阵) 、 Arrays (数组)、 Lists (列表)、 Dataframes()数据框,它们对应的产生方式、应用方法以及各自常用函数的总结。
官网: http://www.r-project.org/
安装宏包: install.packages(“包名”)
调用宏包:library(gplots) / require(??)
帮助: ?function name / help(function name)
模糊搜索:??“key words” / help.search(“key words”)
R面向对象,严格区分大小写
工作路径:
> getwd() #查看当前工作路径
[1] "E:/workspace/self_shlay/190725"
> setwd("E://workspace/") #设置工作路径
> getwd() #再次查看设置后的工作路径
[1] "E:/workspace"
清除变量:
rm(list="a") #清楚变量a
rm(list=ls()) #清除所有变量
选项设置:
> defaults <- options()
> getOption("digits")
[1] 7
> pi
[1] 3.141593
> options(digits=15)
> pi
[1] 3.14159265358979
> options(defaults)
> getOption("digits")
[1] 7
运算类型 | ||||||
---|---|---|---|---|---|---|
二元运算符 | + | - | * | / | ^(幂运算) | %%(求余数) |
数学函数 | abs(绝对值) | sqrt(平方根) | log(对数) | exp(指数) | log10(以10为底取对数) | factorial(阶乘) |
三角函数 | sin | cos | tan | arcsin | arccos | arctan |
取整 | round(四舍五入) | ceiling(向上取整) | floor(向下取整) | trunc(只取整数部分) | signif(保留给定位数) | zapsmall(小数点后指定位数开始四舍五入) |
三角函数 | Inf(正无穷) | -Inf(负无穷) | NAN(空值) | pi(圆周率) | exp(1)(e=2.7182) | 1i(复数,数字1,字母i) |
#一些例子:
x=124%%10 #求余数
x
[1] 4
> a=factorial(4) #求阶乘
> a
[1] 24
##取整
> b=c(-1.58881,-2.31234,-3.96654,2.10023,5.76543)
> round(b)
[1] -2 -2 -4 2 6
> ceiling(b)
[1] -1 -2 -3 3 6
> floor(b)
[1] -2 -3 -4 2 5
> trunc(b)
[1] -1 -2 -3 2 5
> signif(b,digits = 3)
[1] -1.59 -2.31 -3.97 2.10 5.77
> zapsmall(b,digits = 2)
[1] -1.6 -2.3 -4.0 2.1 5.8
> zapsmall(b,digits = 4)
[1] -1.589 -2.312 -3.967 2.100 5.765
##
> 0/0
[1] NaN
> 1/Inf
[1] 0
展示常用的五种数据结构: Vectors ; Matrices ; Arrays ; Lists ; Dataframes
向量生成:
常用产生向量的四种形式:c() ; :(冒号) ; seq() ; rep()
示例如下:
> v1 <- c(1,2.5,3.6,4,5)
> v1
[1] 1.0 2.5 3.6 4.0 5.0
> v2 <- -3:3
> v2
[1] -3 -2 -1 0 1 2 3
> v3 = seq(1,3,by=0.5)
> v3
[1] 1.0 1.5 2.0 2.5 3.0
> seq(0, 2, len=5)
[1] 0.0 0.5 1.0 1.5 2.0
> rep(1:3, each=2)
[1] 1 1 2 2 3 3
> rep(1:3, times=2)
[1] 1 2 3 1 2 3
> rep(1:3, times=c(2,3,4))
[1] 1 1 2 2 2 3 3 3 3
获取向量元素:
常见三种方法:[ ] ; which() ; match()
示例如下:
#[]
> v1 <- c(1,2.5,3.6,4,5)
> v1[3] #R语言下标从1开始
[1] 3.6
> v1[1:3] #R语言1:3表示1,2,3 . 左右两端的数字均包括
[1] 1.0 2.5 3.6
> v1[c(1,3,4)] #以向量的形式展示将要取出的元素下标
[1] 1.0 3.6 4.0
> v1[-2] #表示返回删掉第二个元素后的向量,实际v1并未改变
[1] 1.0 3.6 4.0 5.0
> v1[-c(2,3)] #表示返回删掉第二、三个元素后的向量
[1] 1 4 5
> v1[v1>3] #表示提取v1中大于3的元素
[1] 3.6 4.0 5.0
> v1[3]<- 999 #将v1的第三个元素重新赋值为999
> v1
[1] 1.0 2.5 999.0 4.0 5.0
### which()
> v1>=4 #判断v1的每个元素是否大于等于4
[1] FALSE FALSE TRUE TRUE TRUE
> which(v1>=4) #返回v1中大于等于4的元素所在的位置下标
[1] 3 4 5
> which.max(v1) #返回v1中最大值所在的位置下标
[1] 3
> which.min(v1) #返回v1中最小值所在的位置下标
[1] 1
> v1[which.max(v1)] #根据v1中最大值所在的位置下标结合[ ]返回v1中最大元素值
[1] 999
> max(v1) #获取向量最大元素值的简易方法
[1] 999
### match()
v5 <- rep(1:5, times=5:1)
> v5
[1] 1 1 1 1 1 2 2 2 2 3 3 3 4 4 5
> match(1:5,v5) #返回元素1,2,3,4,5首次出现的位置下标
[1] 1 6 10 13 15
> unique(v5) #获取向量v5中元素取值种类
[1] 1 2 3 4 5
> match(unique(v5),v5) #获取向量v5中元素各取值首次出现的位置
[1] 1 6 10 13 15
(1)创建矩阵:
#语法
matrix(data=NA, nrow=1, ncol=1, byrow = FALSE, dimnames = NULL)
#例子
m <- matrix(c(5,0,6,1,3,5,9,5,7,1,5,3), nrow=3, ncol=4, byrow=TRUE, dimnames=list(rows=c("r.1", "r.2", "r.3"), cols=c("c.1", "c.2", "c.3", "c.4")))
> m
cols
rows c.1 c.2 c.3 c.4
r.1 5 0 6 1
r.2 3 5 9 5
r.3 7 1 5 3
注意:
1)填充矩阵的数据个数不够时将循环使用向量中的数据进行填充
2) nrow, ncol分别定义矩阵的行数和列数;
3)默认的是byrow = FALSE,即按列填充数据;
4)dimnames 默认为 NULL,也可为长度为2的列表分别定义矩阵各行各列的名称。
(2)矩阵元素提取
[ ] 与向量的提取方式一样,只不过矩阵是二维数据的形式
#1.通过[ ]提取元素
x <- matrix(c(5,0,6,1,3,5,9,5,7,1,5,3), nrow=3, ncol=4, byrow=TRUE)
> x
[,1] [,2] [,3] [,4]
[1,] 5 0 6 1
[2,] 3 5 9 5
[3,] 7 1 5 3
> x[2,3] # Row 2, Column 3
[1] 9
> x[1,] # Row 1
[1] 5 0 6 1
> x[,2] # Column 2
[1] 0 5 1
> x[c(1,3),] # Rows 1 and 3, all Columns
[,1] [,2] [,3] [,4]
[1,] 5 0 6 1
[2,] 7 1 5 3
#2.通过设置行名、列名提取元素
> colnames(x) <- c("c.1", "c.2", "c.3","c.4")
> x
[,c.1] [,c.2] [,c.3] [,c.4]
[1,] 5 0 6 1
[2,] 3 5 9 5
[3,] 7 1 5 3
> x[,"c.2"] # Column named "c.2"
[1] 0 5 1
> colnames(x)
[1] "c.1" "c.2" "c.3" "c.4"
> N <- matrix(c(1,2,3,4,5,6,7), nrow=3, ncol=4)
> N
[,1] [,2] [,3] [,4]
[1,] 1 4 7 3
[2,] 2 5 1 4
[3,] 3 6 2 5
> colnames(N) <- c("c.1", "c.2", "c.3","c.4")
> N
[,c.1] [,c.2] [,c.3] [,c.4]
[1,] 1 4 7 3
[2,] 2 5 1 4
[3,] 3 6 2 5
#矩阵按行或者按列合并
> M <- diag(3)
> M
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
> (MN <- cbind(M, N))
[,c.1] [,c.2] [,c,3] [,c.4]
[1,] 1 0 0 1 4 7 3
[2,] 0 1 0 2 5 1 4
[3,] 0 0 1 3 6 2 5
> MN[,2] # Column 2
[1] 0 1 0
> MN[,"c.2"] # Column named "c.2"
[1] 4 5 6
(1)创建数组:
#语法
array(data = NA, dim = length(data), dimnames = NULL)
#示例 ( 2 × 3 × 2数组)
> arr <- array(1:12, dim=c(2,3,2),
+ dimnames=list(c("A","B"), c("X","Y","Z"), c("N","M")))
> arr
, , N
X Y Z
A 1 3 5
B 2 4 6
, , M
X Y Z
A 7 9 11
B 8 10 12
#填充数字不够时
> arr2 <- array(0:9, dim=c(2,3,2),
+ dimnames=list(c("A","B"), c("X","Y","Z"), c("N","M")))
> arr2
, , N
X Y Z
A 0 2 4
B 1 3 5
, , M
X Y Z
A 6 8 0
B 7 9 1
注意:
1)填充数组的数据个数不够时将循环使用向量中的数据进行填充;
2)dim 数组维度,用向量形式表示;
3)dimnames 默认为 NULL,可定义数组各维度的名称,类似于矩阵。
(2)数组元素提取
> arr <- array(1:12, dim=c(2,3,2),
+ dimnames=list(c("A","B"), c("X","Y","Z"), c("N","M")))
> arr
, , N
X Y Z
A 1 3 5
B 2 4 6
, , M
X Y Z
A 7 9 11
B 8 10 12
> arr[2,3,1] # Row 2, Column 3, Matrix 1
[1] 6
> arr[,"Y",] # Column named "Y"
N M
A 3 9
B 4 10
> arr[2,,] # Row 2
N M
X 2 8
Y 4 10
Z 6 12
> arr[1:2,,"M"] # Rows 1 and 2, Matrix "M"
X Y Z
A 7 9 11
B 8 10 12
(1)创建列表:
#语法:
lists(...)
#示例:
> lst <- list(num=c(1,2,4), "shlay", identity=diag(2))
> lst
$`num`
[1] 1 2 4
[[2]]
[1] "shlay"
$identity
[,1] [,2]
[1,] 1 0
[2,] 0 1
注意:
1)列表由多维向量组成,且各向量的数据形式可不同,这是list与上述三种数据结构的不同之一;
2)参数的格式为name=value,可以指定带名称或不带名称的参数。
(2)列表元素提取
列表元素提取方法:[[ ]] ; $ ;
> lst <- list(num=c(1,2,4), "shlay", identity=diag(2))
> lst[[2]] ## Second element of lst ,不带名称的提取
[1] "shlay"
> lst[["num"]] # Element named "num"
[1] 1 2 4
> lst$identity # Element named "identity"
[,1] [,2]
[1,] 1 0
[2,] 0 1
> lst[[3]][1,] # First row of the third element
[1] 1 0
> lst[1:2] # Create a sublist of the first two elements
$`num`
[1] 1 2 4
[[2]]
[1] "shlay"
一般将数据框看成矩阵的一种推广,它可以用矩阵的形式显示,且各列的数据形式可以不同,数据框每列是一个变量,每行是一个观测值。
(1)创建数据框:
#语法:
data.frame()
#示例:
> df<-data.frame(
+ Name=c("Alice","Becka","James","Jeffrey","John"),
+ Sex=c("F","F","M","M","M"),
+ Age=c(13,13,12,13,12),
+ Height=c(56.5,65.3,57.3,62.5,59.0),
+ Weight=c(84.0,98.0,83.0,84.0,99.5)
+ )
> df
Name Sex Age Height Weight
1 Alice F 13 56.5 84.0
2 Becka F 13 65.3 98.0
3 James M 12 57.3 83.0
4 Jeffrey M 13 62.5 84.0
5 John M 12 59.0 99.5
如果一个列表的各个成分满足数据框成分的要求,它可以用as.data.frame()函数强制转换为数据框,比如:
> lst<-list(
+ Name=c("Alice","Becka","James","Jeffrey","John"),
+ Sex=c("F","F","M","M","M"),
+ Age=c(13,13,12,13,12),
+ Height=c(56.5,65.3,57.3,62.5,59.0),
+ Weight=c(84.0,98.0,83.0,84.0,99.5)
+ )
> lst
$`Name`
[1] "Alice" "Becka" "James" "Jeffrey" "John"
$Sex
[1] "F" "F" "M" "M" "M"
$Age
[1] 13 13 12 13 12
$Height
[1] 56.5 65.3 57.3 62.5 59.0
$Weight
[1] 84.0 98.0 83.0 84.0 99.5
> as.data.frame(lst)
Name Sex Age Height Weight
1 Alice F 13 56.5 84.0
2 Becka F 13 65.3 98.0
3 James M 12 57.3 83.0
4 Jeffrey M 13 62.5 84.0
5 John M 12 59.0 99.5
(2)数据框元素提取
引用数据框元素的方法与矩阵相同,可以使用下标或者时下标向量,也可以使用名字或者名字向量,如:
> df<-data.frame(
+ Name=c("Alice","Becka","James","Jeffrey","John"),
+ Sex=c("F","F","M","M","M"),
+ Age=c(13,13,12,13,12),
+ Height=c(56.5,65.3,57.3,62.5,59.0),
+ Weight=c(84.0,98.0,83.0,84.0,99.5)
+ )
> df[1:2,3:5]
Age Height Weight
1 13 56.5 84
2 13 65.3 98
> df[["Height"]]
[1] 56.5 65.3 57.3 62.5 59.0
> df$Weight
[1] 84.0 98.0 83.0 84.0 99.5
(3)数据框常用函数
以向量或者矩阵形式引用时对应操作与向量矩阵一样。
attach(df) #绑定连接
中间引用数据框的某变量时不需要$符号
detach() #取消连接,不需要含参数