基本表达

apply(X, MARGIN, FUN, …) ,X为数据框,margin =1 表示行,2表示列,fun 表示使用的函数。

  1. test<- iris[,1:4]
  2. apply(test, 1, sum)
  3. # 也可以对apply 的操作通过循环实现。
  4. res <- c()
  5. for(i in 1:nrow(test)){
  6. res[[i]] <- sum(test[i,])
  7. }

lapply

对列表或向量进行操作,且返回值也是一个列表。

  1. test <- list(x = 36:33,
  2. y = 32:35,
  3. z = 30:27)
  4. #返回值是列表,对列表中的每个元素(向量)求均值(试试方差var,分位数quantile)
  5. > lapply(test,mean)
  6. $x
  7. [1] 34.5
  8. $y
  9. [1] 33.5
  10. $z
  11. [1] 28.5

sapply

比lapply 简单,也是处理列表或向量,但返回值为向量及矩阵。

  1. test <- list(x = 36:33,
  2. y = 32:35,
  3. z = 30:27)
  4. > sapply(test,min)
  5. x y z
  6. 33 32 27

vapply

与lapply 与sapply 基本类似,只是需要指定 fun(FUN)

recap

01 "apply()"族函数 - 图1

练习题

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