企业网站带商城源码,大连建设,潜江资讯网最新招聘,wordpress中文版下载在R语言中使用循环操作时是使用自身来实现的#xff0c;效率较低。所以R语言有一个符合其统计语言出身的特点#xff1a;向量化。R语言中的向量化运用了底层的C语言#xff0c;而C语言的效率比高层的R语言的效率高。
apply函数族主要是为了解决数据向量化运算的问题#x…在R语言中使用循环操作时是使用自身来实现的效率较低。所以R语言有一个符合其统计语言出身的特点向量化。R语言中的向量化运用了底层的C语言而C语言的效率比高层的R语言的效率高。
apply函数族主要是为了解决数据向量化运算的问题以提高运行效率。
一、apply()函数
它是apply()函数族中最简单的函数它的作用是将一个函数运用到矩阵或数组的某个维度。 此函数有3个参数 X输入的数据一般是矩阵或数据框FUN需要使用的函数GARGIN指定函数在哪个维度上运行。其中1表示行2表示列如果是数组还可以是更大的数字。 1、apply()函数运用到矩阵
x - matrix(1:24, 6, 4)
x
# 计算每一行的最小值
apply(Xx, MARGIN1, FUNmin)
# 计算每一列的平均值
apply(Xx, MARGIN2, FUNmean) # 将x中的一个元素改为NA然后计算每一行的最小值
x[2,4] - NA
apply(Xx, MARGIN1, FUNmin)
# 使用min()函数中删除缺失值的参数na.rm
apply(Xx, MARGIN1, FUNmin, na.rmTRUE)
如下结果所示当x中有NA时得到的结果也会是NA。 2、apply()函数运用到数组
x - array(1:24, dimc(4,3,2))
x
apply(x, MARGIN3, FUNmean)当MARGIN参数为向量时
x - array(1:24, dimc(4,3,2))
x
apply(x, MARGINc(1,3), FUNmean)
MARGINc(1,3)表示对第1维行和第3维深度/层进行操作而保持第2维列不变。 借助以下代码辅助理解。
x - array(1:24, dimc(4,3,2))
x
apply(x, MARGINc(1,3), FUNpaste, collapse-) 也可以在apply()函数中使用自定义函数或匿名函数
apply(x, MARGIN 3, FUN function(x){list(rangerange(x),meanmean(x))}) 二、lapply()函数
此函数允许输入数据为原子向量或递归向量并将函数应用于输入数据的每一个元素输出结果为与输入数据长度相同的列表。
它的参数是X和FUN意义与apply()函数的一致。
1、输入数据为向量时
x - 1:5
lapply(x, function(x){x^3}) 2、输入数据为矩阵时
lapply()函数会将FUN中的函数应用于每个值而不是按照列或行进行应用。
y - matrix(1:4, 2, 2)
y
lapply(y, min) 3、输入数据为列表时
z - list(x)
z
lapply(z,function(z){z^3}) 4、输入数据为数据框时
lapply()函数会将FUN中的函数应用于每一列。
a - data.frame(x1:4,y5:8)
a
lapply(a,max) 三、sapply()函数
sapply()函数其实是lapply()函数的灵活版本除了X和FUN这两个参数外它还多了simplify和USE.NAMES两个参数。 simplify默认为TRUE表示要求输出的结果为向量或矩阵也可以让其等于array表示输出结果为数组。 USE.NAMES默认为TRUE表示当输入为字符串时将以字符串为输出命名。 a - data.frame(x1:4,y5:8)
a
# 当simplify和USE.NAMES都默认为TRUE时
sapply(a,max) 当输入为字符串且USE.NAMES为TRUE时
b letters[1:5]
sapply(b,function(x) paste(x,-,x)) 当simplify和USE.NAMES都为FALSE时sapply()函数的输出结果与lapply()函数完全一致。
a
sapply(a,max,simplifyFALSE, USE.NAMESFALSE)
lapply(a,max) 四、vapply()函数
此函数与sapply()函数类似仅多了一个FUN.VALUE的参数此参数表示指定返回值的类型和形状。
x - list(a1:4,b5:8,c9:13)
x
sapply(x, function(x){x2})
vapply(x, function(x){x2}, FUN.VALUEnumeric(4))
通过FUN.VALUEnumeric(4)将返回值的长度设为4如果其中某个返回值的长度不为4$c就会报错。 五、mapply()函数 mapply()函数是sapply()函数的多变量版本。
在sapply()函数中FUN参数指定的函数只能同时接受一个向量而mapply()函数中的FUN参数指定的函数可以同时接受多个向量。
如下所示FUN中指定的函数接受了两个向量2:6和10:14
mapply(FUNfunction(x,y) c(xy,x*y),2:6,10:14)