apply 家族函数

apply家族函数:提供强大而方便的循环功能
apply, lapply, sapply, vapply, tapply

apply

对矩阵的行或列使用函数,或者对数组的各个维度使用函数

apply(X, MARGIN, FUN, ...)
  • X 矩阵或数组
  • MARGIN 1代表行;2代表列
  • FUN 系统自带的函数,或自定义的函数

输出:向量或矩阵

lapply

对列表中的各个元素使用函数

lapply(X, FUN, ...)
  • X 列表
  • FUN 系统自带的函数,或自定义的函数

输出:列表

任务:
提取出列表中的元素。

方法1:
先定义一个函数,然后再 lapply 里面使用它。

# Define get_timestamp()
get_timestamp <- function(x) {
  x$timestamp
}

# Apply get_timestamp() over all elements in logs
lapply(logs, get_timestamp)

方法2:
匿名函数,直接将函数写在 lapply 里面。
注意:不要忘记写 { }。

lapply(logs, function(x) {x$timestamp})

方法3:
'[['本身就是一个提取元素的函数,可以直接使用。

lapply(logs, '[[', "timestamp")

补充:
'[['函数的使用

x <- list(a = 1, b = 2, c = 3)
x[["a"]]
`[[`(x, "a")

sapply

与 lapply 唯一的不同:输出的结果是1个向量
simplify the lapply result to a vector

如果 lapply 的结果的长度不一致,那么 sapply 的结果也是一个list, 和 lapply 一样。
In some cases, sapply() can simplify to a vector. In other cases, it can’t, and you get the same result lapply() would have returned.

vapply

vapply 和 sapply 很像,但是需要指出结果的格式。例如, numeric(3) character(2)。括号里面的数字代表结果的长度 length。如果指定的长度和实际结果不符,那么就会报错 error。因此,vapply 比 sapply 更安全。

sapply(logs, length)
vapply(logs, length, integer(1))

sapply(logs, `[[`, "success")
vapply(logs, `[[`, logical(1), "success")

注意: logical(1) 的位置在 function 后面。

vapply(X, FUN, FUN.VALUE)

如果结果可以 simplify, 就用 vapply,否则,用 lapply

分组数据处理函数(tapply, by, aggregate)

三个函数的结果呈现方式不同
解决的问题: sex变量,男女的收入总和

reference

B站上视频 阿雷边学边教R语言
https://www.bilibili.com/video/av6768370?from=search&seid=9621515712147171753
https://www.bilibili.com/video/av6826857/?spm_id_from=333.788.videocard.0
https://campus.datacamp.com/courses/intermediate-r-practice

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值