R函数 sapply()

sapply()函数的作用是:将列表、向量或数据帧作为输入,并以向量或矩阵的形式给出输出。sapply()函数和lapply()函数做同样的工作,但是返回一个向量。

参数 描述
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





公众号

关注公众号,获取一手资讯

“ R函数 sapply() ” comments 0

评论/回复

电子邮件地址不会被公开。 必填项已用*标注