任务6: Apply函数类型及其使用
Apply函数家族是处理数据的一组函数,可以循环处理数据,非常强大。与for循环相比,可以节省循环耗时,和计算空间。在碰到循环时,可以优先使用apply家族函数。
家族包括,apply, tapply, mapply, lapply, eapply, sapply, rapply。根据输入的对象不同,和输出的格式不同,所以有多个函数组成这个家族。以下对常用的函数进行介绍:
apply函数: 对矩阵,数据框,数组进行处理
apply(X, MARGIN, FUN, ...)##### examplex <- data.frame("age" = c(11,12,13), "grade" = c(90, 100, 110))apply(x, 2, mean)> apply(x, 2, mean)# age grade# 12 100
参数:
- X为输入元素:matrix, data.frame, array
- MARGIN: 按行或者按列计算,1表行,2表示列
- FUN:自定义函数
- …: 额外自选参数
返回值:vector, matrix
lapply函数:可以对list, data.frame, vetor进行操作,特点是输出为与输入对象X同样长度的list ``` lapply(X, FUN, …)
example
x <- list(“age” = c(11,12,13), “grade” = rnorm(100, 10, 10)) lapply(x, mean)
lapply(x, mean)
$age
[1] 12
$grade
[1] 8.631258
- 参数:- X为输入对象,可以是list, data.frame- FUN:自定义的函数- ...: 额外自选参数- Sapply函数:简化版的lapply,特点是输出值可以为向量, 矩阵, 或数据框
sapply(X, FUN, …, simplify = TRUE, USE.NAMES = TRUE)
example
x <- list(“age” = c(11,12,13), “grade” = rnorm(100, 10, 10)) sapply(x, mean, simplify = TRUE, USE.NAMES = TRUE)
sapply(x, mean, simplify = TRUE, USE.NAMES = TRUE)
age grade
12.000000 8.631258
```
参数:
- X为输入对象:list, matrix, data.frame
- FUN:自定义的函数
- …: 额外自选参数
- simplify:是否数组化,当设置simplify=’array’时,输出结果按数组进行分组
- USE.NAMES:如果X为字符串,TRUE设置字符串为数据名,FALSE不设置
tapply函数 ``` tapply(X, INDEX, FUN, …, simplify = TRUE)
example
tapply(X = iris$Petal.Length,INDEX = iris$Species,FUN = mean)
setosa versicolor virginica
1.462 4.260 5.552
- 参数- X为输入对象:vector- INDEX: 分组的索引- FUN:自定义的函数- ...: 额外自选参数- simplify:是否数组化,当设置simplify='array'时,输出结果按数组进行分组任务7: 代码作业
Medical.Science <- c(“clinical medicine”, “Nursing”, “Basic Medicine”, “Pharmacy”) score <- c(1, 2, NA, 4) grade <- data.frame(Medical.Science, score) Nursing <- subset(grade, grade$Medical.Science == “Nursing”) colnames(grade) colnames(grade)[2] <- “Scale” table(grade$Medical.Science) ``` 2021.12.1 I one
