r语言apply函数用法详解

一、apply函数的概述

apply函数是R语言中非常常用且强大的函数之一。它可以按行或列执行指定函数,并返回结果向量或矩阵。该函数可以用于数组、矩阵和数据框等对象,是一种通用的数据操作方式。apply()函数通常用于进行聚合分析,也可用于简化复杂的代码,提高代码的可读性。

set.seed(123)
matrix1 <- matrix(rnorm(20), ncol=5)
matrix1
#      [,1]  [,2]  [,3]   [,4]   [,5]
#[1,] -0.560 -0.230 1.558 0.0705 1.0705
#[2,] -0.230 1.558 0.070 0.1293 0.1293
#[3,]  1.556 0.0705 0.130 1.7151 0.6859
#[4,]  0.130 1.7151 1.715 0.4609 0.4609

 apply(matrix1, 2, mean)  # 2表示按列进行计算
# [1]  0.4986595  0.7787829  0.8682636  0.8414685  0.5869068

 apply(matrix1, 1, sum)  # 1表示按行进行计算
# [1] 2.866
# [2] 2.055
# [3] 4.127
# [4] 4.462

二、apply函数的参数解析

1. X

X参数表示待操作的对象,如矩阵、数组或数据框等。

set.seed(123)
matrix1 <- matrix(rnorm(20), ncol=5)
matrix1
#      [,1]  [,2]  [,3]   [,4]   [,5]
#[1,] -0.560 -0.230 1.558 0.0705 1.0705
#[2,] -0.230 1.558 0.070 0.1293 0.1293
#[3,]  1.556 0.0705 0.130 1.7151 0.6859
#[4,]  0.130 1.7151 1.715 0.4609 0.4609

apply(matrix1, 2, sum)  # 将每列的元素相加
# [1] 0.896 3.113 3.472 3.366 2.343

2. MARGIN

MARGIN表示函数操作的维度,是一个整数向量。1表示按行操作,2表示按列操作。默认值为1。

set.seed(123)
matrix1 <- matrix(rnorm(20), ncol=5)
matrix1
#      [,1]  [,2]  [,3]   [,4]   [,5]
#[1,] -0.560 -0.230 1.558 0.0705 1.0705
#[2,] -0.230 1.558 0.070 0.1293 0.1293
#[3,]  1.556 0.0705 0.130 1.7151 0.6859
#[4,]  0.130 1.7151 1.715 0.4609 0.4609

apply(matrix1, 1, sum)  # 按行相加
# [1] 2.866
# [2] 2.055
# [3] 4.127
# [4] 4.462

apply(matrix1, 2, sum) # 按列相加
# [1] 0.896 3.113 3.472 3.366 2.343

3. FUN

FUN表示应用到数据的函数。可以是内置函数或自定义函数。

set.seed(123)
matrix1 <- matrix(rnorm(20), ncol=5)
matrix1
#      [,1]  [,2]  [,3]   [,4]   [,5]
#[1,] -0.560 -0.230 1.558 0.0705 1.0705
#[2,] -0.230 1.558 0.070 0.1293 0.1293
#[3,]  1.556 0.0705 0.130 1.7151 0.6859
#[4,]  0.130 1.7151 1.715 0.4609 0.4609

apply(matrix1, 2, function(x) length(unique(x))) # 计算每列独特元素的数量
# [1] 4 4 4 4 4

4. …

省略号可以传递额外的参数给FUN函数,使用时需要将FUN函数设置为可以接受省略号的参数。使用…参数可以动态的传递参数。

# 对x矩阵的每一列做二次项的和
x <- matrix(1:12, ncol=3)
apply(x, 2, function(x, a, b) sum(a * x^2 + b), a=1, b=2)
# [1]  38  83 146

三、apply函数的相关函数

1. sapply函数

sapply()函数可应用于向量、列表和矩阵等。在矩阵中,它返回的结果与apply函数相同。与apply不同的是,sapply返回的是一个向量。

set.seed(123)
matrix1 <- matrix(rnorm(20), ncol=5)
matrix1
#      [,1]  [,2]  [,3]   [,4]   [,5]
#[1,] -0.560 -0.230 1.558 0.0705 1.0705
#[2,] -0.230 1.558 0.070 0.1293 0.1293
#[3,]  1.556 0.0705 0.130 1.7151 0.6859
#[4,]  0.130 1.7151 1.715 0.4609 0.4609

sapply(matrix1, mean)
#[1]  0.4986595  0.7787829  0.8682636  0.8414685  0.5869068

2. lapply函数

lapply()函数可应用于列表、数据框和矩阵等。它返回的是一个列表。

set.seed(123)
matrix1 <- matrix(rnorm(20), ncol=5)
matrix1
#      [,1]  [,2]  [,3]   [,4]   [,5]
#[1,] -0.560 -0.230 1.558 0.0705 1.0705
#[2,] -0.230 1.558 0.070 0.1293 0.1293
#[3,]  1.556 0.0705 0.130 1.7151 0.6859
#[4,]  0.130 1.7151 1.715 0.4609 0.4609
list_1 <- as.list(matrix1)

lapply(list_1, function(x) mean(x))
#[[1]] [1] -0.01877
#[[2]] [1] 0.5275837
#[[3]] [1] 0.8317141
#[[4]] [1] 0.8961867
#[[5]] [1] 0.5869068

3. tapply函数

tapply()函数可以对一个向量按指定的因子进行分类操作。它返回的结果是一个数组、矩阵或列表等。

set.seed(123)
age <- c(28, 20, 34, 22, 30, 31, 27, 26, 21, 25, 25, 32)
sex <- factor(c("M", "M", "F", "F", "M", "F", "F", "M", "M", "F", "M", "F"))
salary <- rnorm(12, mean = 2000, sd = 500)
df1 <- data.frame(age, sex, salary)

tapply(df1$salary, df1$sex, mean)
#   F        M 
#1969.675 2236.187 

四、apply函数的注意事项

1. 数据类型和形式必须正确

输入的数据类型和形式必须符合apply函数的要求。apply()函数不能用于字符型数据或数据框,必须用于向量、数组或矩阵等数据类型。

2. 函数必须是纯函数或返回标量值

如果应用的函数有任何可见副作用,则结果可能无法实现。因此,函数的输出应该是标量值,即单个数字或字符、向量、矩阵或数组。

3. 谨防NA值

apply()函数对于NA值的处理有时可能会使结果出现问题。因此使用该函数时,应注意避免NA值,或使用适当的函数来处理它们。

总结

apply函数是R语言中非常强大、常用的函数之一。通过提供各种选项和参数,可以定制函数操作到各种数据类型。这样,在进行数据操作时,R语言中的apply()函数可以为您节省大量时间和精力,提高代码的可读性和效率。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/194649.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
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 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

发表回复

登录后才能评论