在本例中,输出的元素是数据集本身的元素,因为计算的是每个单独单元格的和。
函数的附加参数
mean
函数有一个额外的参数(
na.rm
)来指定是否删除
NA
值。如果需要指定所应用的函数的参数,可以用逗号分隔:
apply(df, 1, mean, na.rm = TRUE)
应用自定义函数
本例中,我们将创建一个名为fun
的函数,它计算一个数字的平方,如果character
参数设置为TRUE
,则将输出转换为字符。
fun <- function(x, character = FALSE) {
if (character == FALSE) {
x ^ 2
} else {
as.character(x ^2)
apply(df, 1, fun)
[, 1] [, 2] [, 3] [, 4]
x 1 4 9 16
y 25 36 49 64
z 100 121 144 169
如果指定character = TRUE
,则矩阵的每个元素都将被转换为字符。
apply(df, 1, fun, character = TRUE)
[, 1] [, 2] [, 3] [, 4]
[1, ] "1" "4" "9" "16"
[2, ] "25" "36" "49" "64"
[3, ] "100" "121" "144" "169"
apply(df, 2, fun)
x y z
[1, ] 1 25 100
[2, ] 4 36 121
[3, ] 9 49 144
[4, ] 16 64 169
apply(df, c(1, 2), fun)
x y z
[1, ] 1 25 100
[2, ] 4 36 121
[3, ] 9 49 144
[4, ] 16 64 169
f <- function(x) sum(exp(x))
这个函数计算一个数字或向量的指数的和。
e为底的指数函数。例:exp(x)
是e
的 X
次方。
所以如果逐行应用这个函数,会得到以下结果:
apply(df, 1, f)
22177.60 60284.96 163871.51 445448.95
例如,输出的第一个元素(22177.60)可以通过:sum(exp(1) + exp(5) + exp(10))得到。
如果你用列来应用这个函数,会得到以下结果:
apply(df, 2, f)
x y z
84.79102 4629.43310 687068.79094
最后,如果按行和列应用这个函数,输出将是一个包含每个元素指数的矩阵。
apply(df, 1:2, f)
x y z
[1, ] 2.718282 148.4132 22026.47
[2, ] 7.389056 403.4288 59874.14
[3, ] 20.085537 1096.6332 162754.79
[4, ] 54.598150 2980.9580 442413.39
apply()
函数的更多示例
apply(df, 2, min) # 按列计算最小值
apply(df, 2, range) # range(最小值和最大值)按列排列
apply(df, 1, summary) # 对每一行进行汇总
apply(df, 2, summary) # 对每个列进行汇总
# 将sum函数应用于多维数组
ar <- array(data = 1:18, dim = c(3, 2, 3))
apply(ar, 3, sum)
#最后一行的输出是数组中每个元素的所有组件之和。
[1] 21 57 93
https://r-coder.com/apply-r/
往期文章:
aggregate | 在R中进行分组统计
跟着Cell学作图 | 6.时间序列分析(Mfuzz包)
刚开始接触R语言时,会听到各种的R语言使用技巧,其中最重要的一条就是不要用循环,效率特别低,要用向量计算代替循环计算。
那么,这是为什么呢?原因在于R的循环操作for和while,都是基于R语言本身来实现的,而向量操作是基于底层的C语言函数实现的,从性能上来看,就会有比较明显的差距了。那么如何使用C的函数来实现向量计算呢,就是要用到apply的家族函数,包括apply, sapply, tapply, mapply, lapply, rapply, vapply, eapply等。
1. apply的家族函
apply(x, MARGIN, FUN, ...)
其中,x为数据对象,MARGIN是维度的下标,FUN是由你指定的函 数,而...则包括了任何想传递给FUN的参数。在矩阵或数据框 中,MARGIN=1表示行,MARGIN=2表示列。请看以下例子。
#求矩阵每一行或者每一列的均值,可以使用apply()函数
mydata<-matrix(rnorm(30),nrow=6)#生成服从正态.
R语言中有几个常用的函数,可以按组对数据进行处理,apply, lapply, sapply, tapply, mapply,等。这几个函数功能有些类似,下面介绍下这几个函数的用法。 Apply 这是对一个Matrix或者Array进行某个维度的运算。其格式是: Apply(数据,维度Index,运算函数,函数的参数) 对于Matrix来说,其维度值为2,第二个参数维度Index中,1表示按行运算...
接着上一篇的内容,我们继续介绍数据框的处理。5. 删除包含缺失值NA的行在统计建模中,拥有一个在响应或解释变量中不包含任何缺失值的数据框通常很有用,可以使用na.omit()函数来达到这个目的。 这是worms的姊妹版数据框,其中某些值为NA:> data > dataField.Name Area Slope Vegetation Soil.pH Damp Worm.density...
apply函数
对矩阵、数据框、数组(二维、多维)等矩阵型数据,按行或列应用函数FUN进行循环计算,并以返回计算结果
apply(X, MARGIN, FUN, ...)
X:数组、矩阵、数据框等矩阵型数据
MARGIN: 按行计算或按按列计算,1表示按行,2表示按列
FUN: 自定义的调用函数
应用iris数据集进行举例,以下计算前四个变量的均值:
a <- apply(iris[,...
1 import pandas as pd, numpy as np
2 dates = pd.date_range('20130101', periods=6)
3 df = pd.DataFrame(np.random.randn(6
R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大。
R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用...
既含睇兮又宜笑,子慕予兮善窈窕。—— 《山鬼》apply()函数算是R语言里面很基础的一个函数,同时还有sapply()、lapply()、tapply()函数精简了apply()的用法。apply()函数是一个很R语言的函数,可以起到很好的替代冗余的for循环的作用,R语言的循环操作for和while,都是基于R语言本身来实现的,而向量操作是基于底层的C语言函数实现的,所以使用app...