R语言apply函数族

apply函数

现有数据如下,请求出每一行的最大值,和每一列的最小值
在这里插入图片描述
每一行的最大值

apply(a, 1, max)#a是数据,1代表行,max求最大值

在这里插入图片描述
每一列的最小值

apply(a, 2, min)

在这里插入图片描述

lapply函数

lapply( )不仅适用于向量,也适用于列表。假设我们有一份学生列表:

students <- list(  a1 = list(name = "James", 
                             age = 25,  gender = "M", 
                             interest = c("reading",
                                          "writing")),
                   a2 = list(name = "Jenny", age = 23, 
                             gender = "F",
                             interest = c("cooking")), 
                   a3 = list(name = "David", age = 24,
                             gender = "M",
                             interest = c("running", "basketball"))) 
students

现在,我们想创建一个字符向量,其中每个元素都具有如下形式:
James, 25 year-old man, loves reading, writing.
函数 sprintf( )通过将占位符(例如:%s 对应字符串,%d 对应整数)替换为相应的输入参数来格式化文本。举个例子:

sprintf("Hello, %s! Your number is %d.", "Tom", 3)

输出结果:
[1] “Hello, Tom! Your number is 3.”
返回到我们的问题上来,每次迭代都是作用在列表 students上,并且是相互独立的。换句话说,对 James 的相关操作与 Jenny 无关,以此类推。所以,我们可以使用 lapply( )执行这项工作:

lapply(students, function(s) { 
  type <- switch(s$gender, "M" = "man", "F" = "woman")
  interest <- paste(s$interest, collapse = ", ")
  sprintf("%s, %d year-old %s, loves %s.", s$name, s$age, type, interest)})


在这里插入图片描述

sapply函数

列表并非总是存储结果的最佳容器。有时,我们希望将结果放在一个向量或者矩阵中。
sapply( )函数可以根据结果的结构将其合理简化。 假设,我们将平方运算应用到1:10的每个元素上。如果使用 lapply( ),返回的结果就是一个包含平方数的列表。实际上,结果列表的所有成分都是一个单值数值向量,所以列表形式的结果就显得笨重而冗长。因此,我们可能希望以向量形式返回同样的结果:

a <- (1:10)
sapply(a,function(i) i^2)
sapply(a,function(i) c(i,i^2)

在这里插入图片描述
第二个和rbind的作用是一样的
在这里插入图片描述

vapply函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

mapply函数

在这里插入图片描述
在这里插入图片描述
本文参考了r语言编程指南

在R语言中,apply函数是一个非常有用的函数,它可以对矩阵、数组、列表等数据结构进行操作,并返回结果。apply函数有几个不同的变体,包括sapply函数。 sapply函数与lapply函数类似,都是将指定的函数应用于列表、向量、表达式等,并以向量或矩阵的形式返回结果。\[2\]与lapply函数不同的是,sapply函数会尝试将结果转换为更简单的数据结构,例如向量或矩阵。如果函数的返回值是一个向量,则sapply函数返回一个包含这些值的向量。如果函数的返回值是一个大于1的向量,则sapply函数会返回一个矩阵。\[1\] 例如,我们可以使用sapply函数对iris数据集的前四列进行操作,判断每个元素是否大于3,并返回一个矩阵。代码如下: x <- sapply(iris\[,1:4\], function(x) {x > 3}) class(x) 这段代码将返回一个逻辑矩阵,其中的每个元素表示对应位置的值是否大于3。\[1\] 除了sapply函数,还有其他类似的函数,如lapply函数和vapply函数,它们也可以对列表、向量等进行操作,并返回结果。\[3\]这些函数在R语言中非常常用,可以帮助我们快速处理数据和进行统计分析。 #### 引用[.reference_title] - *1* *2* [R语言apply系列函数](https://blog.youkuaiyun.com/ouyangk1026/article/details/122535256)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [R语言:常用apply函数apply,tapply,sapply,lapply)用法介绍](https://blog.youkuaiyun.com/qq_43407763/article/details/91652918)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值