apply
函数
R函数很有趣的一个特性,就是它们可以应用到一系列的数据对象
上。以mean
函数为例子看一下。
> set.seed(1234)
> dt <- runif(20, 1, 20)
> mt <- matrix(dt, nrow = 4, ncol = 5)
> df <- as.data.frame(mt)
>
> mean(dt) #作用于向量
[1] 9.966671
> mean(mt) #作用于矩阵
[1] 9.966671
> mean(dt) #作用于数据框
[1] 9.966671
apply
函数是apply
函数家族的成员之一,可以将R函数作用到作用到多种数据结构的不同维度上。而另外一些成员,lapply() 和sapply() 则可将函数应用到列表(list)上。
apply()
函数的使用格式为:
apply(x, MARGIN, FUN, ...)
其中, x
为数据对象, MARGIN
是维度的下标, FUN
是由你指定的函数, 而...
则包括了任何想传递给FUN
的参数。 在矩阵或数据框中, MARGIN=1
表示行,MARGIN=2
表示列。
还是以刚才的数据为例子,将mean
函数分别作用于数据框的行和列维度。
> dt <- runif(20, 1, 20)
> mt <- matrix(dt, nrow = 4, ncol = 5)
> df <- as.data.frame(mt)
> df
V1 V2 V3 V4 V5
1 3.160365 17.357392 13.65559 6.371938 6.438242
2 12.823689 13.165902 10.77077 18.545236 6.069595
3 12.576220 1.180419 14.17823 6.554001 4.547733
4 12.844209 5.418460 11.35452 16.908617 5.412292
> apply(df, 1, mean) #作用于数据框的行
[1] 9.396706 12.275039 7.807322 10.387620
> apply(df, 2, mean) #作用于数据框的列
V1 V2 V3 V4 V5
10.351121 9.280543 12.489780 12.094948 5.616966