R语言apply族函数

R语言有很重要的apply族函数:lapply sapply apply tapply mapply。这些函数底层通过C实现,效率比手工遍历高效。apply族函数是高效能计算的运算向量化(Vectorization)实现方法之一,比起传统的for,while常常能获得更好的性能。

1. apply 对matrix指定维度操作

###1. apply 对matrix指定维度操作

x <- cbind(x1 = 3, x2 = c(4:1, 2:5),x3= c(1:8))
dimnames(x)[[1]] <- letters[1:8]
apply(x, 2, mean, trim = .2) # 列求平均值
col.sums <- apply(x, 2, sum)
row.sums <- apply(x, 1, sum)
row.sums <- apply(x, 1, sum,simplify = TRUE)

2. lapply:对列表的每个组件执行给定的函数,并返回另一个列表。

###2. lapply:对列表的每个组件执行给定的函数,并返回另一个列表。
x <- list(a = 1:10, beta = exp(-3:3), logic = c(TRUE,FALSE,FALSE,TRUE))
lapply(x,quantile) # 返回list
lapply(x, mean)
lapply(x, quantile, probs = 1:3/4)

3. sapply: 简化的apply和lapply,结果以向量,矩阵,列表的形式输出

###3. sapply: 简化的apply和lapply,结果以向量,矩阵,列表的形式输出
sapply(x, quantile) # 返回matrix

y<-c("100-D","100-A","110-c","110-A")
z<-strsplit(y,"-")
sapply(z,"[",1) #提取列表第1个元素
sapply(z,"[",2) #提取列表中第2个元素

4. mapply:将函数应用于多个列表或向量参数,多参数版本的sapply

###4. mapply:将函数应用于多个列表或向量参数,多参数版本的sapply
b<-matrix(1:12,c(3,4),dimnames=list(c("a","b","c"),c("A","B","C","D")))
mapply(sum, b[,1],b[,3],b[,4]) # 对多个向量按index分别求和

5. vapply:与sapply相似,可以预先指定的返回值类型,得到的结果更加安全

###5. vapply:与sapply相似,可以预先指定的返回值类型,得到的结果更加安全。
vapply(x, quantile, c(1,2,3,6,8))

6. tapply:将数据按照不同方式分组,生成类似列联表形式的数据结果

### 6. tapply:将数据按照不同方式分组,生成类似列联表形式的数据结果。
manager <- c(1, 2, 3, 4, 5)
country <- c("US", "US", "UK", "UK", "UK")
gender <- c("M", "F", "F", "M", "F")
age <- c(32, 45, 25, 39, 99)
leadership <- data.frame(manager, country, gender, age)
#不同country水平下的age的均值
tapply(leadership$age, leadership$country, mean)    
#不同country和gender交叉水平下的age的均值, 输出得到矩阵数据
tapply(leadership$age, list(leadership$country, leadership$gender), mean) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值