基本表达
apply(X, MARGIN, FUN, …) ,X为数据框,margin =1 表示行,2表示列,fun 表示使用的函数。
test<- iris[,1:4]apply(test, 1, sum)# 也可以对apply 的操作通过循环实现。res <- c()for(i in 1:nrow(test)){res[[i]] <- sum(test[i,])}
lapply
对列表或向量进行操作,且返回值也是一个列表。
test <- list(x = 36:33,y = 32:35,z = 30:27)#返回值是列表,对列表中的每个元素(向量)求均值(试试方差var,分位数quantile)> lapply(test,mean)$x[1] 34.5$y[1] 33.5$z[1] 28.5
sapply
比lapply 简单,也是处理列表或向量,但返回值为向量及矩阵。
test <- list(x = 36:33,y = 32:35,z = 30:27)> sapply(test,min)x y z33 32 27
vapply
与lapply 与sapply 基本类似,只是需要指定 fun(FUN) 。
recap

练习题
# 练习:rm(list=ls())library(tidyverse)# 1.加载test2.Rdata,求每一行的方差load("test2.Rdata")apply(test, 1, var)# 2.加载class.Rdata,尝试将前6列转为数值型,得到一个新矩阵load("class.Rdata")y <- y[,1:6]apply(y, 2,as.numeric)# 3.解析代码:names(tail(sort(apply(test,1,sd)),1000))# 获得test 数据框中标准差最大的1000行的行名
