向量操作的函数
1、z是一个向量
sum(z) #求和
mean(z) #求平均值
sd(z) #计算方差
median(z) #求中位数
sort(z) #按从小到大排序append(z,2:3,after) 添加元素
append(z,2:3,after=2) #在向量z后面的第2个位置后面添加2和3
矩阵操作的函数
A,B,C是矩阵
t(A) # 得到矩阵A的转置矩阵
dim(A) #求矩阵A的行数和列数
nrow(A) #求矩阵的行数
ncol(A) #求矩阵的列数
rbind(B,C) #按行合并矩阵
cbind(B,C) #按列合并矩阵
分组函数
1、apply函数
对一个数组按行或者按列进行计算
apply(xy,1,sum) 对矩阵xy按行求和
apply(xy,2,mean)对矩阵xy按列求平均数
使用格式为:
apply(X, MARGIN, FUN, …)
其中X为一个数组;MARGIN为一个向量(表示要将函数FUN应用到X的行还是列),若为1表示取行,为2表示取列,为c(1,2)表示行、列都计算。
x <- runif(10,-1,1);x #生成均匀分布随机数,第一个参数n为个数,第二个参数min为下限,第三个max为上限
y <- rnorm(10,0.5,1);y #生成正态分布随机数,第一个参数n为个数,第二个mean=0为正态分布均值,sd=1位正态分布的标准差
xy <- cbind(x,y);xy #根据列进行合并
apply(xy,1,sum) #对xy按行进行求和运算
apply(xy,2,mean) #对xy进行按列求平均值
2、tapply函数
进行分组统计
tapply(X, INDEX, FUN = NULL, …, simplify = TRUE)
其中X通常是一向量;INDEX是一个list对象,且该list中的每一个元素都是与X有同样长度的因子;FUN是需要计算的函数;simplify是逻辑变量,若取值为TRUE(默认值),且函数FUN的计算结果总是为一个标量值,那么函数tapply返回一个数组;若取值为FALSE,则函数tapply的返回值为一个list对象。需要注意的是,当第二个参数INDEX不是因子时,函数 tapply() 同样有效,因为必要时 R 会用 as.factor()把参数强制转换成因子。
t1 <- factor(rep(1:4,length=14),levels=1:5,labels=c("A","B","C","D","E"));t1
t2 <- c(1:14) ;t2
tapply(t2,t1,sum) #按照t1的标签对t2进行分组求和,返回值为标量值
tapply(t2,t1,sum,simplify=FALSE) #按照t1的标签对t2进行分组求和,并且返回值为list对象
3、lapply()
3、lapply()对列表对象调用函数进行计算
lapply(X, FUN, …)
lapply的返回值是和一个和X有相同的长度的list对象,这个list对象中的每个元素是将函数FUN应用到X的每一个元素。其中X为List对象(该list的每个元素都是一个向量),其他类型的对象会被R通过函数as.list()自动转换为list类型。
L1 <- list(a=1:20,b=runif(30,-2,5),d=matrix(c(1:10))) #创建一个列表
lapply(L1,quantile) #对列表对象L1求四分位数
quantile 求四分位数
四分位数为对一个列表排序后的,)%0,%25,%50,%75,100%位置上的数
4、sapply()
函数sapply是函数lapply的一个特殊情形,对一些参数的值进行了一些限定,其使用格式为:
sapply(X, FUN,…, simplify = TRUE, USE.NAMES = TRUE)
sapply(, simplify = FALSE, USE.NAMES = FALSE) 和lapply()的返回值是相同的。如果参数simplify=TRUE,则函数sapply的返回值不是一个list,而是一个矩阵;若simplify=FALSE,则函数sapply的返回值仍然是一个list。
sapply(L1,quantile,simplify=FALSE,use.names=FALSE) #对L1求四分位数,返回结果为列表
sapply(L1,quantile,simplify=TRUE,use.names=FALSE) #对L1求四分位数,返回结果为矩阵