R语言 对象循环
前提是。R编程中的数据结构
for “循环最大的问题之一是它的内存消耗和执行重复性任务时的缓慢速度。当涉及到处理大型数据集并对其进行迭代时,不建议使用for循环。R提供了许多可以应用于向量的循环操作的替代方法,当在命令行上交互工作时,这些替代方法是非常有用的。在这篇文章中,我们将讨论 apply() 函数和它的变体。
- apply()
- lapply()
- sapply()
- tapply()
- mapply()
让我们看看这些函数各自的作用。
循环功能 | 操作 |
---|---|
apply() | 在一个数组或矩阵的边缘应用一个函数 |
lapply() | 在一个列表或一个向量上应用一个函数 |
sapply() | 与lapply()相同,但有简化的结果 |
tapply() | 在一个锯齿状的数组上应用一个函数 |
mapply() | lapply()的多变量版本 |
- apply() 。该函数将一个给定的函数应用于一个给定的数组的边缘。
apply(array, margins, function, …)
array = 元素的列表
margins = 需要应用函数的数组的尺寸
function = 你想执行的操作
示例:
# R program to illustrate
# apply() function
# Creating a matrix
A = matrix(1:9, 3, 3)
print(A)
# Applying apply() over row of matrix
# Here margin 1 is for row
r = apply(A, 1, sum)
print(r)
# Applying apply() over column of matrix
# Here margin 2 is for column
c = apply(A, 2, sum)
print(c)
输出:
[, 1] [, 2] [, 3]
[1, ] 1 4 7
[2, ] 2 5 8
[3, ] 3 6 9
[1] 12 15 18
[1] 6 15 24
- lapply():这个函数用来在一个列表上应用一个函数。它总是返回一个与输入列表相同长度的列表。
lapply(list, function, …)
list = 创建的列表
function= 你想执行的操作
示例:
# R program to illustrate
# lapply() function
# Creating a matrix
A = matrix(1:9, 3, 3)
# Creating another matrix
B = matrix(10:18, 3, 3)
# Creating a list
myList = list(A, B)
# applying lapply()
determinant = lapply(myList, det)
print(determinant)
输出:
[[1]]
[1] 0
[[2]]
[1] 5.329071e-15
sapply(list, function, …)
list = Created list
- sapply():这个函数用来简化lapply()的结果,如果可能的话。与lapply()不同,其结果并不总是一个列表。输出在以下方面有变化:-
- 如果输出是一个包含长度为1的元素的列表,那么将返回一个向量。
- 如果输出是一个列表,其中所有的元素都是相同长度的向量(>1),那么就会返回一个矩阵。
- 如果输出包含不能被简化的元素或不同类型的元素,则返回一个列表。function = the operation which you want to perform
示例:
# R program to illustrate
# sapply() function
# Creating a list
A = list(a = 1:5, b = 6:10)
# applying sapply()
means = sapply(A, mean)
print(means)
输出:
a b
3 8
返回一个向量,因为输出有一个长度为1的元素的列表。
- tapply() : 这个函数用来在由因子组合给出的向量子集上应用一个函数。
tapply(vector, factor, function, …)
vector = 创建的向量
factor = 创建的因子
function = 你想执行的操作
示例:
# R program to illustrate
# tapply() function
# Creating a factor
Id = c(1, 1, 1, 1, 2, 2, 2, 3, 3)
# Creating a vector
val = c(1, 2, 3, 4, 5, 6, 7, 8, 9)
# applying tapply()
result = tapply(val, Id, sum)
print(result)
输出:
1 2 3
10 18 17
上述代码是如何工作的?
- mapply() 。这是lapply()的一个多变量版本。这个函数可以同时应用于几个列表。
mapply(function, list1, list2, …)
function = 你想执行的操作
list1, list2 = 创建的列表
示例:
# R program to illustrate
# mapply() function
# Creating a list
A = list(c(1, 2, 3, 4))
# Creating another list
B = list(c(2, 5, 1, 6))
# Applying mapply()
result = mapply(sum, A, B)
print(result)
输出:
[1] 24