apply函數(shù)
R函數(shù)很有趣的一個特性,就是它們可以應(yīng)用到一系列的數(shù)據(jù)對象
上。以mean函數(shù)為例子看一下。
> 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) #作用于數(shù)據(jù)框
[1] 9.966671
apply函數(shù)是apply函數(shù)家族的成員之一,可以將R函數(shù)作用到作用到多種數(shù)據(jù)結(jié)構(gòu)的不同維度上。而另外一些成員,lapply() 和sapply() 則可將函數(shù)應(yīng)用到列表(list)上。
apply()函數(shù)的使用格式為:
apply(x, MARGIN, FUN, ...)
其中, x 為數(shù)據(jù)對象, MARGIN 是維度的下標(biāo), FUN 是由你指定的函數(shù), 而...則包括了任何想傳遞給FUN的參數(shù)。 在矩陣或數(shù)據(jù)框中, MARGIN=1表示行,MARGIN=2表示列。
還是以剛才的數(shù)據(jù)為例子,將mean函數(shù)分別作用于數(shù)據(jù)框的行和列維度。
> 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) #作用于數(shù)據(jù)框的行
[1] 9.396706 12.275039 7.807322 10.387620
> apply(df, 2, mean) #作用于數(shù)據(jù)框的列
V1 V2 V3 V4 V5
10.351121 9.280543 12.489780 12.094948 5.616966