在本例中,输出的元素是数据集本身的元素,因为计算的是每个单独单元格的和。

函数的附加参数

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)eX次方。

所以如果逐行应用这个函数,会得到以下结果:

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
 
  1. 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...