一、向量
存储一维相同类型的数据
> x<-c(1,2 ,4,5) #创建向量
> x
[1] 1 2 4 5
> x1<-seq(1,10)#创建向量
> x1
[1] 1 2 3 4 5 6 7 8 9 10
> x2<-seq(1,10,by=2)#步长为2
> x2
[1] 1 3 5 7 9
> x3<-seq(1,10,length=4)#长度为4
> x3
[1] 1 4 7 10
> m<-c(x=1,y=2,z=3)#向量命名
> m
x y z
1 2 3
> m[1]#取m向量第一个元素
x
1
> m[-2]#负小标表示取去掉相应的元素后的子集
x z
1 3
> y<-c(1,3,4)
> names(y)<- c("x1","x2","x3")
> y
x1 x2 x3
1 3 4
> mode(y)#数据类型
[1] "numeric
> range(y)#数据范围
[1] 1 4
> length(y)#数据长度
[1] 3
> which.max(y)#向量y第几个元素最大
[1] 3
> which.min(y)#向量y第几个元素最小
[1] 1
二、列表
存储一维不同类型的数据,可以将向量、数组,矩阵,数据框,列表存储在同一个列表。
#创建列表方式1
> A<-list(name="黎明",age=20,score=c(88,66,77))
> A
$name
[1] "黎明"
$age
[1] 20
$score
[1] 88 66 77
#创建列表方式2
> ID<-c(1:4)
> age<-c(11,15,16,12)
> class<-c(1,4,3,2)
> score<-c(88,77,66,95)
> studata<-list("学号"=ID,"年龄"=age,"班级"=class,"成绩"=score)
> studata
$学号
[1] 1 2 3 4
$年龄
[1] 11 15 16 12
$班级
[1] 1 4 3 2
$成绩
[1] 88 77 66 95
#列表命名
> names(studata)<-c("列表1","列表2","列表3","列表4")
> studata
$列表1
[1] 1 2 3 4
$列表2
[1] 11 15 16 12
$列表3
[1] 1 4 3 2
$列表4
[1] 88 77 66 95
#访问列表中元素
> studata$列表1
[1] 1 2 3 4
> studata$列表1[1]
[1] 1
> studata[1]
$列表1
[1] 1 2 3 4
> studata[[1]]
[1] 1 2 3 4
> studata[[1]][1]
[1] 1
#修改列表中元素
> B<-list(name="黎明",age=20,score=c(88,66,77))
> B[["score"]][2]<-55
> B
$name
[1] "黎明"
$age
[1] 20
$score
[1] 88 55 77
#删除元素
> B<-list(name="黎明",age=20,score=c(88,66,77))
> B[["score"]][2]<-55
> B[["score"]]<-NULL
> B
$name
[1] "黎明"
$age
[1] 20
#增加新元素
> B[["ID"]]<-012221
> B
$name
[1] "黎明"
$age
[1] 20
$ID
[1] 12221
#列表类型转换
as.list()其他类型转换成列表
unlist()列表转换成其他类型(原来的类型)
三、矩阵
存储二维相同类型的数据
#创建矩阵
> xx<-matrix(1:12,nrow = 3,ncol = 4)
> xx
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> xx1<-matrix(1:12,nrow = 3,ncol = 4,byrow=T)#生成以行排列的3*4矩阵
> xx1
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
> nrow(xx1)#访问矩阵行数
[1] 3
> ncol(xx1))#访问矩阵列数
[1] 4
> dim(xx1)#矩阵的dim属性,两个元素分别表示矩阵的行数和列数
[1] 3 4
#矩阵的行列命名
> rownames(xx1) <- letters[1:3]
> colnames(xx1) <- LETTERS[23:26]
> xx1
W X Y Z
a 1 2 3 4
b 5 6 7 8
c 9 10 11 12
#访问矩阵元素
> xx1[1,]#取出xx1的第一行
W X Y Z
1 2 3 4
> xx1[,2]#取出xx1的第二列
a b c
2 6 10
> xx1[3,2]#取出xx1的第三行第二列的元素
[1] 10
> xx1[3,c(1,4)]#取出xx1的第三行第一列和第四列的元素
W Z
9 12
> diag(xx1)#取对角线元素
[1] 1 6 11
> diag(diag(xx1))#取对角线元素生成新矩阵
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 6 0
[3,] 0 0 11
> t(xx1)#转置矩阵
a b c
W 1 5 9
X 2 6 10
Y 3 7 11
Z 4 8 12
> t(xx1)%*%xx1#矩阵相乘
W X Y Z
W 107 122 137 152
X 122 140 158 176
Y 137 158 179 200
Z 152 176 200 224
> crossprod(xx1,xx1)#点乘
> slove(xx1)#求逆矩阵
> eigen(xx1)#求矩阵的特征向量和特征值
> chol()#对矩阵进行 Choleskey 分解
> xx1[upper.tri(xx1)]<-0#取下三角矩阵
> xx1
W X Y Z
a 1 0 0 0
b 5 6 0 0
c 9 10 11 0
> xx1[lower.tri(xx1)]<-0#取上三角矩阵
四、数据框
存储二维不同类型的数据
> xx2 <- data.frame(
+ name=c("张三", "李四", "王五"),
+ age=c(20, 19, 22),
+ height=c(180, 162, 175),
+ stringsAsFactors=FALSE)
> xx2
name age height
1 张三 20 180
2 李四 19 162
3 王五 22 175
#修改行列名
row.names()
col.names()
#访问元素
> xx2[,2]
[1] 20 19 22
> xx2[3,]
name age height
3 王五 22 175
> xx2[3,2]
[1] 22
> xx2$age
[1] 20 19 22
> attach(xx2)#绑定xx2
> name
[1] "张三" "李四" "王五"
> detach(xx2)#解绑xx2
> >xx2[xx2$age>20,]#年龄大于20岁的人
name age height
3 王五 22 175
五、数组
存储n维相同类型的数据
#创建三维数组
> xx3 <- array(1:24, dim=c(2,3,4))
> xx3
, , 1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
, , 2
[,1] [,2] [,3]
[1,] 7 9 11
[2,] 8 10 12
, , 3
[,1] [,2] [,3]
[1,] 13 15 17
[2,] 14 16 18
, , 4
[,1] [,2] [,3]
[1,] 19 21 23
[2,] 20 22 24
> xx3[,,1]
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6