R函数 sapply()
sapply()函数的作用是:将列表、向量或数据帧作为输入,并以向量或矩阵的形式给出输出。
sapply()函数和lapply()函数做同样的工作,但是返回一个向量。
sapply(X, FUN)
| 参数 | 描述 |
| X | 向量或对象 |
| FUN | 作用于x中每个元素的函数 |
我们可以从cars数据集中测量汽车的最小速度和停止距离:
dt <- cars
lmn_cars <- lapply(dt, min)
smn_cars <- sapply(dt, min)
lmn_cars
# 结果
$speed
[1] 4
$dist
[1] 2
smn_cars
# 结果
speed dist
4 2
汽车的最大速度和停止距离
lmxcars <- lapply(dt, max)
smxcars <- sapply(dt, max)
lmxcars
# 结果
$speed
[1] 25
$dist
[1] 120
smxcars
# 结果
speed dist
25 120
我们可以在lapply()或sapply()中使用用户定义的函数。我们创建一个名为avg的函数来计算向量的最小值和最大值的平均值。
avg <- function(x) {
( min(x) + max(x) ) / 2}
fcars <- sapply(dt, avg)
fcars
# 结果
speed dist
14.5 61.0
在返回的输出中,sapply()函数比lapply()更有效,因为sapply()将值分隔存储到一个向量中。在下一个示例中,我们将看到情况并非总是如此。
向量切片
我们可以使用可互换的lapply()或sapply()来分割数据帧。我们创建一个函数below_average(),它接受一个由数值组成的向量,并返回一个只包含严格高于平均值的值的向量。我们用same()函数比较这两个结果。
below_ave <- function(x) {
ave <- mean(x)
return(x[x > ave])
}
dt_s<- sapply(dt, below_ave)
dt_l<- lapply(dt, below_ave)
identical(dt_s, dt_l)
结果:
[1] TRUE
网友评论