R语言有六种基本的数据结构,包括标量、向量、矩阵、数组、数据框和列表。 标量指具体的单个数值,是向量的特例,根据数据的维度和同质/异质可分为5种类型。
向量举例
c1<-c(1,3,5,7,9)
c1
## [1] 1 3 5 7 9
c2<-c(2,4,6,8,10)
c2
## [1] 2 4 6 8 10
矩阵举例
mat1<-rbind(c1,c2)
mat1
## [,1] [,2] [,3] [,4] [,5]
## c1 1 3 5 7 9
## c2 2 4 6 8 10
mat2<-cbind(c1,c2)
mat2
## c1 c2
## [1,] 1 2
## [2,] 3 4
## [3,] 5 6
## [4,] 7 8
## [5,] 9 10
数组举例
dim1<-c("A1","A2")
dim2<-c("B1","B2","B3")
dim3<-c("C1","C2","C3","C4")
array1<-array(1:24,c(2,3,4),dimnames=list(dim1,dim2,dim3))
array1
## , , C1
##
## B1 B2 B3
## A1 1 3 5
## A2 2 4 6
##
## , , C2
##
## B1 B2 B3
## A1 7 9 11
## A2 8 10 12
##
## , , C3
##
## B1 B2 B3
## A1 13 15 17
## A2 14 16 18
##
## , , C4
##
## B1 B2 B3
## A1 19 21 23
## A2 20 22 24
array2<-array(1:24,c(3,2,4),dimnames=list(dim2,dim1,dim3))
array2
## , , C1
##
## A1 A2
## B1 1 4
## B2 2 5
## B3 3 6
##
## , , C2
##
## A1 A2
## B1 7 10
## B2 8 11
## B3 9 12
##
## , , C3
##
## A1 A2
## B1 13 16
## B2 14 17
## B3 15 18
##
## , , C4
##
## A1 A2
## B1 19 22
## B2 20 23
## B3 21 24
数据框举例
tree.id<-1:5
species<-c("sp1","sp2","sp3","sp4","sp5")
dbh<-c(1,3,5,7,9)
height<-c(2,4,6,8,10)
group<-c("Pioneer","Clamix","Exotic","Transtional","Climax")
tree<-data.frame(tree.id,species,dbh,height,group)
tree
## tree.id species dbh height group
## 1 1 sp1 1 2 Pioneer
## 2 2 sp2 3 4 Clamix
## 3 3 sp3 5 6 Exotic
## 4 4 sp4 7 8 Transtional
## 5 5 sp5 9 10 Climax
列表举例
list1<-list(C1=c1,Mat1=mat1,Array1=array1,Tree=tree)
list1
## $C1
## [1] 1 3 5 7 9
##
## $Mat1
## [,1] [,2] [,3] [,4] [,5]
## c1 1 3 5 7 9
## c2 2 4 6 8 10
##
## $Array1
## , , C1
##
## B1 B2 B3
## A1 1 3 5
## A2 2 4 6
##
## , , C2
##
## B1 B2 B3
## A1 7 9 11
## A2 8 10 12
##
## , , C3
##
## B1 B2 B3
## A1 13 15 17
## A2 14 16 18
##
## , , C4
##
## B1 B2 B3
## A1 19 21 23
## A2 20 22 24
##
##
## $Tree
## tree.id species dbh height group
## 1 1 sp1 1 2 Pioneer
## 2 2 sp2 3 4 Clamix
## 3 3 sp3 5 6 Exotic
## 4 4 sp4 7 8 Transtional
## 5 5 sp5 9 10 Climax
list2<-list(C2=c2,Mat2=mat2,Array2=array2,Tree=tree)
list2
## $C2
## [1] 2 4 6 8 10
##
## $Mat2
## c1 c2
## [1,] 1 2
## [2,] 3 4
## [3,] 5 6
## [4,] 7 8
## [5,] 9 10
##
## $Array2
## , , C1
##
## A1 A2
## B1 1 4
## B2 2 5
## B3 3 6
##
## , , C2
##
## A1 A2
## B1 7 10
## B2 8 11
## B3 9 12
##
## , , C3
##
## A1 A2
## B1 13 16
## B2 14 17
## B3 15 18
##
## , , C4
##
## A1 A2
## B1 19 22
## B2 20 23
## B3 21 24
##
##
## $Tree
## tree.id species dbh height group
## 1 1 sp1 1 2 Pioneer
## 2 2 sp2 3 4 Clamix
## 3 3 sp3 5 6 Exotic
## 4 4 sp4 7 8 Transtional
## 5 5 sp5 9 10 Climax
向量(Vector)是R语言最基本的数据结构,称为 R 语言中的战斗机。
创建一组向量
x<-c(88,5,12,13,24,58,112)
x
## [1] 88 5 12 13 24 58 112
以同样方法创建 x 向量
x<-vector(length=7)
x[1]<-88
x[2]<-5
x[3]<-12
x[4]<-13
x[5]<-24
x[6]<-58
x[7]<-112
x
## [1] 88 5 12 13 24 58 112
使用:运算符创建向量
5:10
## [1] 5 6 7 8 9 10
10:5
## [1] 10 9 8 7 6 5
使用seq创建向量
seq(from=12,to=30,by=3)
## [1] 12 15 18 21 24 27 30
seq(12,30,3)
## [1] 12 15 18 21 24 27 30
seq(from=12,to=30,length=7)
## [1] 12 15 18 21 24 27 30
seq(12,30,length=7)
## [1] 12 15 18 21 24 27 30
使用rep创建向量
rep(20,each=5)
## [1] 20 20 20 20 20
rep(20,5)
## [1] 20 20 20 20 20
rep(c(1:3),each=3)
## [1] 1 1 1 2 2 2 3 3 3
rep(c(1:3),times=3)
## [1] 1 2 3 1 2 3 1 2 3
rep(c(1:3),3)
## [1] 1 2 3 1 2 3 1 2 3
添加向量元素
adx<-c(x[1:2],55,x[3:4],78,x[5:6],112,x[7])
adx
## [1] 88 5 55 12 13 78 24 58 112 112
删除向量元素
rmx<-c(x[c(-4,-6)])
rmx
## [1] 88 5 12 24 112
以同样方法产生 rmx 向量
rmx<-x[c(1,2:3,5,7)]
rmx
## [1] 88 5 12 24 112
x<-c(88,5,12,13,24,58,112)
x
## [1] 88 5 12 13 24 58 112
x[1]
## [1] 88
x[1:3]
## [1] 88 5 12
v<-1:3
x[v]
## [1] 88 5 12
x[c(1,3,5:6)]
## [1] 88 12 24 58
x[c(1,1,1,3,5:6)]
## [1] 88 88 88 12 24 58
x[-1]
## [1] 5 12 13 24 58 112
x[-(1:3)]
## [1] 13 24 58 112
v<-1:3
x[-v]
## [1] 13 24 58 112
x[-c(1,3,5:6)]
## [1] 5 13 112
x[-c(1,1,1,3,5:6)]
## [1] 5 13 112
获取向量长度
x<-c(88,5,12,13,24,58,112)
x
## [1] 88 5 12 13 24 58 112
length(x)
## [1] 7
adx<-c(x[1:2],55,x[3:4],78,x[5:6],112,x[7])
adx
## [1] 88 5 55 12 13 78 24 58 112 112
length(adx)
## [1] 10
rmx<-x[c(1,2:3,5,7)]
rmx
## [1] 88 5 12 24 112
length(rmx)
## [1] 5
简单运算
2+3
## [1] 5
"+"(2,3)
## [1] 5
2-3
## [1] -1
"-"(2,3)
## [1] -1
2*3
## [1] 6
"*"(2,3)
## [1] 6
2/3
## [1] 0.6666667
"/"(2,3)
## [1] 0.6666667
循环补齐
两个向量使用运算符时, R 会自动循环补齐,即重复较短的向量,直到它与另一个向量长度相匹配。
c(1,2,4)+c(2,4,6)
## [1] 3 6 10
c(1,2,4)+c(2,4,6,2)
## Warning in c(1, 2, 4) + c(2, 4, 6, 2): 长的对象长度不是短的对象长度的整倍数
## [1] 3 6 10 3
c(1,2,4)+c(2,4,6,2,4)
## Warning in c(1, 2, 4) + c(2, 4, 6, 2, 4): 长的对象长度不是短的对象长度的整倍数
## [1] 3 6 10 3 6
c(1,2,4)+c(2,4,6,2,4,6)
## [1] 3 6 10 3 6 10
all和any函数
x<-c(88,5,12,13,24,58,112)
x
## [1] 88 5 12 13 24 58 112
any(x>20)
## [1] TRUE
all(x>20)
## [1] FALSE
any(x>4)
## [1] TRUE
all(x>4)
## [1] TRUE
NA 与 NULL 值
NA 表示缺失值, NULL 表示不存在的值
y<-c(1,6,34,NA,345,168)
y
## [1] 1 6 34 NA 345 168
mean(y)
## [1] NA
mean(y,na.rm=TRUE)
## [1] 110.8
y<-c(1,6,34,NULL,345,168)
y
## [1] 1 6 34 345 168
mean(y)
## [1] 110.8
向量筛选
x<-c(88,5,12,13,24,58,112)
x
## [1] 88 5 12 13 24 58 112
x[x*x>200]
## [1] 88 24 58 112
subset(x,x*x>200)
## [1] 88 24 58 112
which的用法
x<-c(88,5,12,13,24,58,112)
x
## [1] 88 5 12 13 24 58 112
which(x*x>200)
## [1] 1 5 6 7
x[which(x*x>200)]
## [1] 88 24 58 112
测试向量是否相等
x<-c(88,5,12,13,24,58,112)
x
## [1] 88 5 12 13 24 58 112
x1<-x
x1==x
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
"=="(x1,x)
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
x1!=x
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE
"!="(x1,x)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x2=c(2,3,5,13,24,58,112)
x2==x
## [1] FALSE FALSE FALSE TRUE TRUE TRUE TRUE
"=="(x2,x)
## [1] FALSE FALSE FALSE TRUE TRUE TRUE TRUE
x2!=x
## [1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE
"!="(x2,x)
## [1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE
向量元素的名称
xy<-x
names(xy)
## NULL
names(xy)<-c("a","b","c","d","e","f","g")
xy
## a b c d e f g
## 88 5 12 13 24 58 112
xy["e"]
## e
## 24
xy[c("a","e")]
## a e
## 88 24
矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数。
mat<-matrix(c(1:4),nrow=2,ncol=2)
mat
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
mat<-matrix(nrow=2,ncol=2)
mat[1,1]<-1
mat[2,1]<-2
mat[1,2]<-3
mat[2,2]<-4
mat
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
mrow<-matrix(c(1,2,3,4,5,6),nrow=2,byrow=TRUE)
mrow
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
mcol<-matrix(c(1,2,3,4,5,6),nrow=2)
mcol
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
zmat<-matrix(1:18,nrow=6,ncol=3,byrow=TRUE)
zmat
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
## [4,] 10 11 12
## [5,] 13 14 15
## [6,] 16 17 18
zmat[1,1]
## [1] 1
zmat[1,]
## [1] 1 2 3
zmat[,1]
## [1] 1 4 7 10 13 16
zmat[,2:3]
## [,1] [,2]
## [1,] 2 3
## [2,] 5 6
## [3,] 8 9
## [4,] 11 12
## [5,] 14 15
## [6,] 17 18
zmat[2:3,]
## [,1] [,2] [,3]
## [1,] 4 5 6
## [2,] 7 8 9
zmat[2,2:3]
## [1] 5 6
zmat[2:3,2]
## [1] 5 8
zmat[-1,-1]
## [,1] [,2]
## [1,] 5 6
## [2,] 8 9
## [3,] 11 12
## [4,] 14 15
## [5,] 17 18
zmat[-1,]
## [,1] [,2] [,3]
## [1,] 4 5 6
## [2,] 7 8 9
## [3,] 10 11 12
## [4,] 13 14 15
## [5,] 16 17 18
zmat[,-1]
## [,1] [,2]
## [1,] 2 3
## [2,] 5 6
## [3,] 8 9
## [4,] 11 12
## [5,] 14 15
## [6,] 17 18
zmat[,-c(2:3)]
## [1] 1 4 7 10 13 16
zmat[-c(2:3),]
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 10 11 12
## [3,] 13 14 15
## [4,] 16 17 18
zmat[-2,-c(2:3)]
## [1] 1 7 10 13 16
zmat[-c(2:3),-2]
## [,1] [,2]
## [1,] 1 3
## [2,] 10 12
## [3,] 13 15
## [4,] 16 18
矩阵相乘
mat<-matrix(c(1:4),nrow=2,ncol=2)
mat
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
mat%*%mat
## [,1] [,2]
## [1,] 7 15
## [2,] 10 22
矩阵数量相乘
mat*3
## [,1] [,2]
## [1,] 3 9
## [2,] 6 12
矩阵相加
mat+mat
## [,1] [,2]
## [1,] 2 6
## [2,] 4 8
矩阵元素筛选
zmat<-matrix(1:18,nrow=6,ncol=3,byrow=TRUE)
zmat
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
## [4,] 10 11 12
## [5,] 13 14 15
## [6,] 16 17 18
zmat[zmat[,3]>=8,]
## [,1] [,2] [,3]
## [1,] 7 8 9
## [2,] 10 11 12
## [3,] 13 14 15
## [4,] 16 17 18
zmat[zmat[,1]>2&zmat[2,]>4&zmat[3,]>6,]
## [,1] [,2] [,3]
## [1,] 4 5 6
## [2,] 7 8 9
## [3,] 13 14 15
## [4,] 16 17 18
对矩阵的行和列调用函数
apply函数的一般形式为: apply(m,dimcode,f,fargs)。其中, m 是一个矩阵;dimcode是维度编号,若取值为 1 表示对每一行应用函数,若取值为 2 表示对每一列应用函数; f 是应用在行或列上的函数; fargs 是 f 的可选参数集。
zmat<-matrix(1:18,nrow=6,ncol=3,byrow=TRUE)
zmat
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
## [4,] 10 11 12
## [5,] 13 14 15
## [6,] 16 17 18
apply(zmat,1,mean)
## [1] 2 5 8 11 14 17
rowMeans(zmat)
## [1] 2 5 8 11 14 17
apply(zmat,2,mean)
## [1] 8.5 9.5 10.5
colMeans(zmat)
## [1] 8.5 9.5 10.5
矩阵的转置
zmat<-matrix(1:18,nrow=6,ncol=3,byrow=TRUE)
zmat
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
## [4,] 10 11 12
## [5,] 13 14 15
## [6,] 16 17 18
t(zmat)
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 4 7 10 13 16
## [2,] 2 5 8 11 14 17
## [3,] 3 6 9 12 15 18
增加或删除矩阵的行或列
可以通过函数 rbind(代表 row bind,按行组合)和函数 cbind(代表column bind,按列组合)
zmat<-matrix(1:18,nrow=6,ncol=3,byrow=TRUE)
zmat
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
## [4,] 10 11 12
## [5,] 13 14 15
## [6,] 16 17 18
one<-rep(1,6)
cbind(zmat,one)
## one
## [1,] 1 2 3 1
## [2,] 4 5 6 1
## [3,] 7 8 9 1
## [4,] 10 11 12 1
## [5,] 13 14 15 1
## [6,] 16 17 18 1
two<-rep(2,3)
rbind(two,zmat)
## [,1] [,2] [,3]
## two 2 2 2
## 1 2 3
## 4 5 6
## 7 8 9
## 10 11 12
## 13 14 15
## 16 17 18
qr<-rbind(c(1,2),c(3,4))
qr
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
qc<-cbind(c(1,2),c(3,4))
qc
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
避免降维
zmat<-matrix(1:18,nrow=6,ncol=3,byrow=TRUE)
zmat
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
## [4,] 10 11 12
## [5,] 13 14 15
## [6,] 16 17 18
zmat[,3]
## [1] 3 6 9 12 15 18
zmat[,3,drop=FALSE]
## [,1]
## [1,] 3
## [2,] 6
## [3,] 9
## [4,] 12
## [5,] 15
## [6,] 18
数组(array)是 R 中更一般的对象,矩阵是数组的一个特殊情形。数组可以是多维的。例如一个三维的数组可以包含行、列和层(layer) ,而一个矩阵只用行和列两个维度。
tree.id<-c("T1","T2","T3","T4")
variable<-c("dbh","height","crownwid")
year<-c("2001","2002","2003","2004")
multisurvey<-array(1:48,c(4,3,4),dimnames=list(tree.id,variable,year))
multisurvey
## , , 2001
##
## dbh height crownwid
## T1 1 5 9
## T2 2 6 10
## T3 3 7 11
## T4 4 8 12
##
## , , 2002
##
## dbh height crownwid
## T1 13 17 21
## T2 14 18 22
## T3 15 19 23
## T4 16 20 24
##
## , , 2003
##
## dbh height crownwid
## T1 25 29 33
## T2 26 30 34
## T3 27 31 35
## T4 28 32 36
##
## , , 2004
##
## dbh height crownwid
## T1 37 41 45
## T2 38 42 46
## T3 39 43 47
## T4 40 44 48
multisurvey[1,,]
## 2001 2002 2003 2004
## dbh 1 13 25 37
## height 5 17 29 41
## crownwid 9 21 33 45
multisurvey[,1,]
## 2001 2002 2003 2004
## T1 1 13 25 37
## T2 2 14 26 38
## T3 3 15 27 39
## T4 4 16 28 40
multisurvey[,,1]
## dbh height crownwid
## T1 1 5 9
## T2 2 6 10
## T3 3 7 11
## T4 4 8 12
multisurvey[2,2,]
## 2001 2002 2003 2004
## 6 18 30 42
multisurvey[,2,2]
## T1 T2 T3 T4
## 17 18 19 20
multisurvey[2,,2]
## dbh height crownwid
## 14 18 22
行、列和维度
dim(multisurvey)
## [1] 4 3 4
nrow(multisurvey)
## [1] 4
ncol(multisurvey)
## [1] 3
长度
length(multisurvey)
## [1] 48
行名、列名和维度名
rownames(multisurvey)
## [1] "T1" "T2" "T3" "T4"
colnames(multisurvey)
## [1] "dbh" "height" "crownwid"
dimnames(multisurvey)
## [[1]]
## [1] "T1" "T2" "T3" "T4"
##
## [[2]]
## [1] "dbh" "height" "crownwid"
##
## [[3]]
## [1] "2001" "2002" "2003" "2004"
plot.no<-paste("P",1:10,sep="")
elevation<-c(1020,1164,1190,1212,1261,1270,1283,1312,1387,1393)
aspect<-c("SE20","W","NE34","S","W","SE45","NE40","W","SW55","E")
gradient<-c(35,31,37,40,35,30,23,40,38,35)
position<-c("Down","Down","Middle","Middle","Middle","Up","Down","Down","Up","Down")
density<-c(1025,1000,2075,1350,1750,1275,850,1025,1300,1050)
envpara<-data.frame(plot.no,elevation,aspect,gradient,position,density)
envpara
## plot.no elevation aspect gradient position density
## 1 P1 1020 SE20 35 Down 1025
## 2 P2 1164 W 31 Down 1000
## 3 P3 1190 NE34 37 Middle 2075
## 4 P4 1212 S 40 Middle 1350
## 5 P5 1261 W 35 Middle 1750
## 6 P6 1270 SE45 30 Up 1275
## 7 P7 1283 NE40 23 Down 850
## 8 P8 1312 W 40 Down 1025
## 9 P9 1387 SW55 38 Up 1300
## 10 P10 1393 E 35 Down 1050
envpara[1,1]
## [1] "P1"
envpara[,2:3]
## elevation aspect
## 1 1020 SE20
## 2 1164 W
## 3 1190 NE34
## 4 1212 S
## 5 1261 W
## 6 1270 SE45
## 7 1283 NE40
## 8 1312 W
## 9 1387 SW55
## 10 1393 E
envpara[2:3,]
## plot.no elevation aspect gradient position density
## 2 P2 1164 W 31 Down 1000
## 3 P3 1190 NE34 37 Middle 2075
envpara[2,2:3]
## elevation aspect
## 2 1164 W
subset的用法
subset(envpara,elevation>=1200) #提取 envpara 数据中海拔大于 1200 m 的样地数据
## plot.no elevation aspect gradient position density
## 4 P4 1212 S 40 Middle 1350
## 5 P5 1261 W 35 Middle 1750
## 6 P6 1270 SE45 30 Up 1275
## 7 P7 1283 NE40 23 Down 850
## 8 P8 1312 W 40 Down 1025
## 9 P9 1387 SW55 38 Up 1300
## 10 P10 1393 E 35 Down 1050
subset(envpara,position=="Down") #提取 envpara 数据中坡位处于下部的样地数据
## plot.no elevation aspect gradient position density
## 1 P1 1020 SE20 35 Down 1025
## 2 P2 1164 W 31 Down 1000
## 7 P7 1283 NE40 23 Down 850
## 8 P8 1312 W 40 Down 1025
## 10 P10 1393 E 35 Down 1050
subset(envpara,elevation>=1200&position=="Down") #提取 envpara 数据中海拔大于1200 m且坡位处于下部的样地数据
## plot.no elevation aspect gradient position density
## 7 P7 1283 NE40 23 Down 850
## 8 P8 1312 W 40 Down 1025
## 10 P10 1393 E 35 Down 1050
使用rbind和cbind
meandbh<-c(19.4,18.45,11.36,15.88,11.9,12.76,9.33,13.87,10.23,16.42)
envpara.addrow<-cbind(envpara,meandbh)
newcol<-data.frame("P11",1437,"SW70",15,"Middle",1275)
names(newcol)<-names(envpara)
envpara.addcol<-rbind(envpara,newcol)
使用 apply
envnum<-envpara[,c(2,4,6)]
apply(envnum,1,mean)
## [1] 693.3333 731.6667 1100.6667 867.3333 1015.3333 858.3333 718.6667
## [8] 792.3333 908.3333 826.0000
rowMeans(envnum)
## [1] 693.3333 731.6667 1100.6667 867.3333 1015.3333 858.3333 718.6667
## [8] 792.3333 908.3333 826.0000
apply(envnum,1,sum)
## [1] 2080 2195 3302 2602 3046 2575 2156 2377 2725 2478
rowSums(envnum)
## [1] 2080 2195 3302 2602 3046 2575 2156 2377 2725 2478
apply(envnum,2,mean)
## elevation gradient density
## 1249.2 34.4 1270.0
colMeans(envnum)
## elevation gradient density
## 1249.2 34.4 1270.0
apply(envnum,2,sum)
## elevation gradient density
## 12492 344 12700
colSums(envnum)
## elevation gradient density
## 12492 344 12700
surveydata<-list(meandbh=meandbh,envpara=envpara)
surveydata
## $meandbh
## [1] 19.40 18.45 11.36 15.88 11.90 12.76 9.33 13.87 10.23 16.42
##
## $envpara
## plot.no elevation aspect gradient position density
## 1 P1 1020 SE20 35 Down 1025
## 2 P2 1164 W 31 Down 1000
## 3 P3 1190 NE34 37 Middle 2075
## 4 P4 1212 S 40 Middle 1350
## 5 P5 1261 W 35 Middle 1750
## 6 P6 1270 SE45 30 Up 1275
## 7 P7 1283 NE40 23 Down 850
## 8 P8 1312 W 40 Down 1025
## 9 P9 1387 SW55 38 Up 1300
## 10 P10 1393 E 35 Down 1050
surveydata[1:2]
## $meandbh
## [1] 19.40 18.45 11.36 15.88 11.90 12.76 9.33 13.87 10.23 16.42
##
## $envpara
## plot.no elevation aspect gradient position density
## 1 P1 1020 SE20 35 Down 1025
## 2 P2 1164 W 31 Down 1000
## 3 P3 1190 NE34 37 Middle 2075
## 4 P4 1212 S 40 Middle 1350
## 5 P5 1261 W 35 Middle 1750
## 6 P6 1270 SE45 30 Up 1275
## 7 P7 1283 NE40 23 Down 850
## 8 P8 1312 W 40 Down 1025
## 9 P9 1387 SW55 38 Up 1300
## 10 P10 1393 E 35 Down 1050
surveydata[1]
## $meandbh
## [1] 19.40 18.45 11.36 15.88 11.90 12.76 9.33 13.87 10.23 16.42
surveydata$meandbh
## [1] 19.40 18.45 11.36 15.88 11.90 12.76 9.33 13.87 10.23 16.42
surveydata[["meandbh"]]
## [1] 19.40 18.45 11.36 15.88 11.90 12.76 9.33 13.87 10.23 16.42
surveydata[[1]]
## [1] 19.40 18.45 11.36 15.88 11.90 12.76 9.33 13.87 10.23 16.42
surveydata$meandbh[5]
## [1] 11.9
surveydata[["meandbh"]][5]
## [1] 11.9
surveydata[[1]][5]
## [1] 11.9
surveydata$envpara
## plot.no elevation aspect gradient position density
## 1 P1 1020 SE20 35 Down 1025
## 2 P2 1164 W 31 Down 1000
## 3 P3 1190 NE34 37 Middle 2075
## 4 P4 1212 S 40 Middle 1350
## 5 P5 1261 W 35 Middle 1750
## 6 P6 1270 SE45 30 Up 1275
## 7 P7 1283 NE40 23 Down 850
## 8 P8 1312 W 40 Down 1025
## 9 P9 1387 SW55 38 Up 1300
## 10 P10 1393 E 35 Down 1050
surveydata[["envpara"]]
## plot.no elevation aspect gradient position density
## 1 P1 1020 SE20 35 Down 1025
## 2 P2 1164 W 31 Down 1000
## 3 P3 1190 NE34 37 Middle 2075
## 4 P4 1212 S 40 Middle 1350
## 5 P5 1261 W 35 Middle 1750
## 6 P6 1270 SE45 30 Up 1275
## 7 P7 1283 NE40 23 Down 850
## 8 P8 1312 W 40 Down 1025
## 9 P9 1387 SW55 38 Up 1300
## 10 P10 1393 E 35 Down 1050
surveydata[[2]]
## plot.no elevation aspect gradient position density
## 1 P1 1020 SE20 35 Down 1025
## 2 P2 1164 W 31 Down 1000
## 3 P3 1190 NE34 37 Middle 2075
## 4 P4 1212 S 40 Middle 1350
## 5 P5 1261 W 35 Middle 1750
## 6 P6 1270 SE45 30 Up 1275
## 7 P7 1283 NE40 23 Down 850
## 8 P8 1312 W 40 Down 1025
## 9 P9 1387 SW55 38 Up 1300
## 10 P10 1393 E 35 Down 1050
surveydata$envpara[2,5]
## [1] "Down"
surveydata[["envpara"]][2,5]
## [1] "Down"
surveydata[[2]][2,5]
## [1] "Down"
获取长度
length(surveydata)
## [1] 2
length(surveydata[1])
## [1] 1
length(surveydata[[1]])
## [1] 10
length(surveydata[2])
## [1] 1
length(surveydata[[2]])
## [1] 6
增加或删除列表元素
surveydata.new<-c(location="Qingling",surveydata)
surveydata.new
## $location
## [1] "Qingling"
##
## $meandbh
## [1] 19.40 18.45 11.36 15.88 11.90 12.76 9.33 13.87 10.23 16.42
##
## $envpara
## plot.no elevation aspect gradient position density
## 1 P1 1020 SE20 35 Down 1025
## 2 P2 1164 W 31 Down 1000
## 3 P3 1190 NE34 37 Middle 2075
## 4 P4 1212 S 40 Middle 1350
## 5 P5 1261 W 35 Middle 1750
## 6 P6 1270 SE45 30 Up 1275
## 7 P7 1283 NE40 23 Down 850
## 8 P8 1312 W 40 Down 1025
## 9 P9 1387 SW55 38 Up 1300
## 10 P10 1393 E 35 Down 1050
surveydata.new$location<-NULL
surveydata.new
## $meandbh
## [1] 19.40 18.45 11.36 15.88 11.90 12.76 9.33 13.87 10.23 16.42
##
## $envpara
## plot.no elevation aspect gradient position density
## 1 P1 1020 SE20 35 Down 1025
## 2 P2 1164 W 31 Down 1000
## 3 P3 1190 NE34 37 Middle 2075
## 4 P4 1212 S 40 Middle 1350
## 5 P5 1261 W 35 Middle 1750
## 6 P6 1270 SE45 30 Up 1275
## 7 P7 1283 NE40 23 Down 850
## 8 P8 1312 W 40 Down 1025
## 9 P9 1387 SW55 38 Up 1300
## 10 P10 1393 E 35 Down 1050
surveydata$location<-"Qingling"
surveydata
## $meandbh
## [1] 19.40 18.45 11.36 15.88 11.90 12.76 9.33 13.87 10.23 16.42
##
## $envpara
## plot.no elevation aspect gradient position density
## 1 P1 1020 SE20 35 Down 1025
## 2 P2 1164 W 31 Down 1000
## 3 P3 1190 NE34 37 Middle 2075
## 4 P4 1212 S 40 Middle 1350
## 5 P5 1261 W 35 Middle 1750
## 6 P6 1270 SE45 30 Up 1275
## 7 P7 1283 NE40 23 Down 850
## 8 P8 1312 W 40 Down 1025
## 9 P9 1387 SW55 38 Up 1300
## 10 P10 1393 E 35 Down 1050
##
## $location
## [1] "Qingling"
surveydata$location<-NULL
surveydata
## $meandbh
## [1] 19.40 18.45 11.36 15.88 11.90 12.76 9.33 13.87 10.23 16.42
##
## $envpara
## plot.no elevation aspect gradient position density
## 1 P1 1020 SE20 35 Down 1025
## 2 P2 1164 W 31 Down 1000
## 3 P3 1190 NE34 37 Middle 2075
## 4 P4 1212 S 40 Middle 1350
## 5 P5 1261 W 35 Middle 1750
## 6 P6 1270 SE45 30 Up 1275
## 7 P7 1283 NE40 23 Down 850
## 8 P8 1312 W 40 Down 1025
## 9 P9 1387 SW55 38 Up 1300
## 10 P10 1393 E 35 Down 1050
apply 系列函数
lapply(list(1:3,25:29),sum)
## [[1]]
## [1] 6
##
## [[2]]
## [1] 135
sapply(list(1:3,25:29),sum)
## [1] 6 135
lapply(list(1:3,25:29),mean)
## [[1]]
## [1] 2
##
## [[2]]
## [1] 27
sapply(list(1:3,25:29),mean)
## [1] 2 27
envnum.lower<-envpara[,c(2,4,6)]
envnum.middle<-data.frame(
elevation=c(1437,1521,1533,1582,1587,1604,1618,1658,1665,1680),
gradient=c(15,42,28,38,35,32,33,29,33,30),
density=c(1275,1200,1425,1125,1400,1150,1400,2225,1400,1050))
envnum.high<-data.frame(
elevation=c(1702,1708,1710,1768,1810,1815,1835,1889,1957,1999),
gradient=c(25,35,33,20,27,39,44,30,23,33),
density=c(1075,1525,700,975,1275,1350,1700,1625,1750,1550))
envnum.total<-list(lower=envnum.lower,middle=envnum.middle,high=envnum.high)
lapply(envnum.total,rowSums)
## $lower
## [1] 2080 2195 3302 2602 3046 2575 2156 2377 2725 2478
##
## $middle
## [1] 2727 2763 2986 2745 3022 2786 3051 3912 3098 2760
##
## $high
## [1] 2802 3268 2443 2763 3112 3204 3579 3544 3730 3582
lapply(envnum.total,function(x) apply(x,1,sum))
## $lower
## [1] 2080 2195 3302 2602 3046 2575 2156 2377 2725 2478
##
## $middle
## [1] 2727 2763 2986 2745 3022 2786 3051 3912 3098 2760
##
## $high
## [1] 2802 3268 2443 2763 3112 3204 3579 3544 3730 3582
sapply(envnum.total,rowSums)
## lower middle high
## [1,] 2080 2727 2802
## [2,] 2195 2763 3268
## [3,] 3302 2986 2443
## [4,] 2602 2745 2763
## [5,] 3046 3022 3112
## [6,] 2575 2786 3204
## [7,] 2156 3051 3579
## [8,] 2377 3912 3544
## [9,] 2725 3098 3730
## [10,] 2478 2760 3582
sapply(envnum.total,function(x) apply(x,1,sum))
## lower middle high
## [1,] 2080 2727 2802
## [2,] 2195 2763 3268
## [3,] 3302 2986 2443
## [4,] 2602 2745 2763
## [5,] 3046 3022 3112
## [6,] 2575 2786 3204
## [7,] 2156 3051 3579
## [8,] 2377 3912 3544
## [9,] 2725 3098 3730
## [10,] 2478 2760 3582
lapply(envnum.total,rowMeans)
## $lower
## [1] 693.3333 731.6667 1100.6667 867.3333 1015.3333 858.3333 718.6667
## [8] 792.3333 908.3333 826.0000
##
## $middle
## [1] 909.0000 921.0000 995.3333 915.0000 1007.3333 928.6667 1017.0000
## [8] 1304.0000 1032.6667 920.0000
##
## $high
## [1] 934.0000 1089.3333 814.3333 921.0000 1037.3333 1068.0000 1193.0000
## [8] 1181.3333 1243.3333 1194.0000
lapply(envnum.total,function(x) apply(x,1,mean))
## $lower
## [1] 693.3333 731.6667 1100.6667 867.3333 1015.3333 858.3333 718.6667
## [8] 792.3333 908.3333 826.0000
##
## $middle
## [1] 909.0000 921.0000 995.3333 915.0000 1007.3333 928.6667 1017.0000
## [8] 1304.0000 1032.6667 920.0000
##
## $high
## [1] 934.0000 1089.3333 814.3333 921.0000 1037.3333 1068.0000 1193.0000
## [8] 1181.3333 1243.3333 1194.0000
sapply(envnum.total,rowMeans)
## lower middle high
## [1,] 693.3333 909.0000 934.0000
## [2,] 731.6667 921.0000 1089.3333
## [3,] 1100.6667 995.3333 814.3333
## [4,] 867.3333 915.0000 921.0000
## [5,] 1015.3333 1007.3333 1037.3333
## [6,] 858.3333 928.6667 1068.0000
## [7,] 718.6667 1017.0000 1193.0000
## [8,] 792.3333 1304.0000 1181.3333
## [9,] 908.3333 1032.6667 1243.3333
## [10,] 826.0000 920.0000 1194.0000
sapply(envnum.total,function(x) apply(x,1,mean))
## lower middle high
## [1,] 693.3333 909.0000 934.0000
## [2,] 731.6667 921.0000 1089.3333
## [3,] 1100.6667 995.3333 814.3333
## [4,] 867.3333 915.0000 921.0000
## [5,] 1015.3333 1007.3333 1037.3333
## [6,] 858.3333 928.6667 1068.0000
## [7,] 718.6667 1017.0000 1193.0000
## [8,] 792.3333 1304.0000 1181.3333
## [9,] 908.3333 1032.6667 1243.3333
## [10,] 826.0000 920.0000 1194.0000