将函数应用于数据对象 apply()

apply()函数

函数可以应用于一系列的数据对象上,包括标量,向量,矩阵,数组,数据框。
将函数应用于数据对象。
apply函数是最常用的代替for循环的函数。

a <- 5
sqrt(a)
b <- c(1.2,222,30.34)
round(b)
c <- matrix(runif(12),nrow = 3)
log(c)
mean(c)

这里mean()求得是矩阵中12个元素的均值。
如果需要求得是矩阵中每列每行的均值,可以用R中的apply()函数,可将一个任意函数“应用”到矩阵、数组、数据框的任何维度上。

apply()函数的使用格式为:apply(X, MARGIN, FUN, …)

Arguments
X : an array, including a matrix.
MARGIN : a vector giving the subscripts which the function will be applied over. E.g., for a matrix 1 indicates rows, 2 indicates columns, c(1, 2) indicates rows and columns. Where X has named dimnames, it can be a character vector selecting dimension names.
FUN : the function to be applied: see ‘Details’. In the case of functions like +, %
%, etc., the function name must be backquoted or quoted.
… : optional arguments to FUN.*
X为数据对象,MARGIN是维度的下标,FUN 是由你指定的函数,而…则包括了任何想传递给FUN的参数。
在矩阵或者数据框中,MARGIN=1代表行,MARGIN=2表示列。
请看以下例子:

mydata <- matrix(rnorm(30),nrow = 6)
apply(mydata,1,mean)
apply(mydata,2,mean)

首先生成了一个包含正太随机数的6*5矩阵。然后计算了6行的均值,以及5列的均值。
FUN可为任意R函数,这也包括自行编写的函数,所以apply()是一种很强大的机制。apply()可把函数应用于数据的某个维度上,而lapply()和sapply()则可将函数应用到列表上。

lapply()和sapply()

lapply returns a list of the same length as X, each element of which is the result of applying FUN to the corresponding element of X.
sapply is a user-friendly version and wrapper of lapply by default returning a vector, matrix or, if simplify = “array”, an array if appropriate, by applying >simplify2array(). sapply(x, f, simplify = FALSE, USE.NAMES = FALSE) is the same as lapply(x, f).

lapply 返回与原始集合长度相同的列表对象,其每个元素都是将FUN应用于列表的相应元素的结果。
sapply代表simplified [l]apply,是易于使用的版本,可以将结果整理以向量,矩阵,列表的形式输出。

Usage lapply(X, FUN, …)
sapply(X, FUN, …, simplify = TRUE,USE.NAMES = TRUE)
vapply(X, FUN, FUN.VALUE, …, USE.NAMES = TRUE)

这两个函数很想, 都是应用于向量或列表。上面的apply应用于数组或矩阵,所以通常apply()需要3个参数,而lapply()和sapply()需要2个参数, 第一个参数是输入数据,第二个参数是FUN。两者的区别在于返回值上面,sapply返回的是一个向量,lapply返回的是列表。

如果sapply()的参数 simplify=FALSE和USE.NAMES=FALSE,那么完全sapply函数就等于lapply函数了。

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

Mina笑美

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值