深入剖析lapply函数

一、lapply的定义

lapply是R语言中的一个常用函数,其全称为“list apply”,即对于一个列表型对象的每一元素应用一个特定的函数,返回一个由这些函数的返回值组成的列表对象。同时,lapply也支持其他的对象类型,如向量和数据框。

其基本语法如下:

lapply(X, FUN, …)

X表示列表型对象,FUN表示需要应用的函数,…代表FUN所需要的参数

二、lapply的使用

使用lapply时,需要先有一个列表型对象,下面我们通过示例代码来说明:

#创建列表型对象
my_list <- list(1:5, letters[1:10])

#定义函数
my_fun <- function(x) {
  paste(x, "hello", sep = ", ")
}

#通过lapply对my_list中每个元素应用my_fun函数
lapply(my_list, my_fun)

运行结果如下:

[[1]]
[1] "1 hello, 2 hello, 3 hello, 4 hello, 5 hello"

[[2]]
[1] "a hello, b hello, c hello, d hello, e hello, f hello, g hello, h hello, i hello, j hello"

可以看到,lapply返回了一个列表对象,其中每个元素都是由my_fun函数返回的结果。这个结果和my_list对象的结构一样,是一个由两个元素组成的列表。

三、lapply的特点

1、自动化迭代

lapply是一个高度封装的函数,它对于迭代的过程进行了自动化处理,用户只需要提供一个列表对象和一个需要应用的函数,就可以轻松地将这个函数应用到列表的每个元素上。

例如下面的代码:

#创建数字型向量和字符型向量
my_num <- 1:10
my_char <- letters[1:10]

#定义平方函数和转换为大写字母的函数
my_square <- function(x) {
  x^2
}
my_upper <- function(x) {
  toupper(x)
}

#通过lapply对my_num和my_char中的每个元素应用函数
lapply(my_num, my_square)
lapply(my_char, my_upper)

运行结果如下:

[[1]]
[1] 1

[[2]]
[1] 4

[[3]]
[1] 9

[[4]]
[1] 16

[[5]]
[1] 25

[[6]]
[1] 36

[[7]]
[1] 49

[[8]]
[1] 64

[[9]]
[1] 81

[[10]]
[1] 100

[[1]]
[1] "A"

[[2]]
[1] "B"

[[3]]
[1] "C"

[[4]]
[1] "D"

[[5]]
[1] "E"

[[6]]
[1] "F"

[[7]]
[1] "G"

[[8]]
[1] "H"

[[9]]
[1] "I"

[[10]]
[1] "J"

可以看到,lapply自动对列表的每个元素进行了迭代,并将函数应用到每个元素上,返回了一个新的列表。此时每个元素都已经被处理完毕了。

2、结果是一个列表对象

lapply的返回结果是一个由函数处理结果组成的列表对象。这个列表对象的长度等于X的长度,每个元素是一个独立的处理结果。

例如下面的代码:

#创建一个数据框
my_df <- data.frame(name = c("Jack", "Peter", "Mary"),
                   age = c(26, 30, 24),
                   gender = c("M", "M", "F"))

#定义函数
my_fun <- function(x) {
  paste("Name:", x$name, "Age:", x$age, "Gender:", x$gender, sep = " ")
}

#通过lapply对my_df每行应用my_fun函数
lapply(1:nrow(my_df), function(x) {
  my_fun(my_df[x, ])
})

运行结果如下:

[[1]]
[1] "Name:Jack Age:26 Gender:M"

[[2]]
[1] "Name:Peter Age:30 Gender:M"

[[3]]
[1] "Name:Mary Age:24 Gender:F"

可以看到,lapply返回了一个列表对象,其中每个元素都是由my_fun函数在my_df数据框的每行都应用一次得到的结果。

四、lapply与其他apply函数的比较

1、apply

apply函数是R语言中非常经典的函数之一,它可以应用到任何数组型对象中,包括向量、矩阵和数据框等。而lapply只能应用到列表、向量和数据框等具有特定结构的对象中。

#创建矩阵型对象
my_mat <- matrix(1:12, nrow = 3)

#通过apply函数对矩阵中每行的元素进行求和
apply(my_mat, 1, sum)

#通过lapply函数对my_list中的每个元素应用sum函数
lapply(my_list, sum)

可以看到,通过apply函数可以对矩阵的每行应用sum函数得到其和,通过lapply函数只能对向量中的元素、列表中的元素、数据框中的列应用函数得到特定的结果。

2、sapply、vapply和mapply

sapply、vapply和mapply都是lapply的改进版本,具有更好的灵活性和更方便的使用方式。

sapply:

sapply基于lapply,并且自动处理返回结果的转换。它会根据返回结果的类型,自动把返回结果转换为简单的类型(向量、矩阵或列表),可以省去转换的步骤。

#创建列表型对象
my_list <- list(1:5, letters[1:10])

#定义函数
my_fun <- function(x) {
  paste(x, "hello", sep = ", ")
}

#通过sapply对my_list中每个元素应用my_fun函数
sapply(my_list, my_fun)

可以看到,sapply可以自动将返回结果转换为简单的类型,这里转换成了一个矩阵。

     [,1]                 [,2]                            
[1,] "1 hello"            "a hello"                        
[2,] "2 hello"            "b hello"                        
[3,] "3 hello"            "c hello"                        
[4,] "4 hello"            "d hello"                        
[5,] "5 hello"            "e hello"                        
[6,] NA                      "f hello"                        
[7,] NA                      "g hello"                        
[8,] NA                      "h hello"                        
[9,] NA                      "i hello"                        
[10,] NA                      "j hello"

vapply:

vapply函数比sapply更为安全,因为它可以指定返回结果的类型和长度,避免返回结果出现不一致的情况。

mapply:

mapply函数适用于多列表模式下的应用,即在列表中应用多个具有相同结构的函数,或在多个列表中应用一个具有多参数的函数。

五、总结

lapply函数是R中一个非常常用且重要的函数。它为我们提供了一种高效、便捷的方式,对列表、向量和数据框等对象的每个元素应用相同的函数。在实际应用中,lapply可以帮助我们快速地进行数据处理和分析,提高工作效率。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/194496.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2024-12-02 14:39
下一篇 2024-12-02 14:39

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python中capitalize函数的使用

    在Python的字符串操作中,capitalize函数常常被用到,这个函数可以使字符串中的第一个单词首字母大写,其余字母小写。在本文中,我们将从以下几个方面对capitalize函…

    编程 2025-04-29
  • Python中set函数的作用

    Python中set函数是一个有用的数据类型,可以被用于许多编程场景中。在这篇文章中,我们将学习Python中set函数的多个方面,从而深入了解这个函数在Python中的用途。 一…

    编程 2025-04-29
  • 单片机打印函数

    单片机打印是指通过串口或并口将一些数据打印到终端设备上。在单片机应用中,打印非常重要。正确的打印数据可以让我们知道单片机运行的状态,方便我们进行调试;错误的打印数据可以帮助我们快速…

    编程 2025-04-29
  • 三角函数用英语怎么说

    三角函数,即三角比函数,是指在一个锐角三角形中某一角的对边、邻边之比。在数学中,三角函数包括正弦、余弦、正切等,它们在数学、物理、工程和计算机等领域都得到了广泛的应用。 一、正弦函…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • Python定义函数判断奇偶数

    本文将从多个方面详细阐述Python定义函数判断奇偶数的方法,并提供完整的代码示例。 一、初步了解Python函数 在介绍Python如何定义函数判断奇偶数之前,我们先来了解一下P…

    编程 2025-04-29
  • Python实现计算阶乘的函数

    本文将介绍如何使用Python定义函数fact(n),计算n的阶乘。 一、什么是阶乘 阶乘指从1乘到指定数之间所有整数的乘积。如:5! = 5 * 4 * 3 * 2 * 1 = …

    编程 2025-04-29
  • 分段函数Python

    本文将从以下几个方面详细阐述Python中的分段函数,包括函数基本定义、调用示例、图像绘制、函数优化和应用实例。 一、函数基本定义 分段函数又称为条件函数,指一条直线段或曲线段,由…

    编程 2025-04-29
  • Python函数名称相同参数不同:多态

    Python是一门面向对象的编程语言,它强烈支持多态性 一、什么是多态多态是面向对象三大特性中的一种,它指的是:相同的函数名称可以有不同的实现方式。也就是说,不同的对象调用同名方法…

    编程 2025-04-29

发表回复

登录后才能评论