R中的各种APPLY函数(批量处理,灰常好玩)

       批量处理宽表矩阵数据时,这东西特有帮助。 当不需要多进程的情况, 用apply来个多线程并行处理也不错啊。
但它还是有个缺点,不能在内部修改外部变量,但可以读取外部变量。没有java多线程的那种线程共享机制,但对于
简单的并行处理还是很有帮助的。

 

apply function

apply(array, margin, function, ...)

用途:
将指定function应用到指定array的指定margin(维度)上。
例子:

> data <- cbind(c(1,2),c(3,4))
> data.rowsum <- apply(data,1,sum)
> data.colsum <- apply(data,2,sum)
> data

    [,1] [,2]
[1,] 1 3
[2,] 2 4

> data.rowsum

[1] 4 6

> data.colsum

[1] 3 7


lapply function

lapply(list, function, ...)

用途:
主要用于处理data frame,因为R中data frame被认为是一个包含变量名(列名称)和变量值(列向量)的list,用lapply可以很方便的将指定function应用到data frame中所有变量上。注意:lapply的结果也是一个list。
例子:

> data.df <- as.data.frame(data)
> colnames(data.df) <- c("VAR1","VAR2")
> is.list(data.df)
[1] TRUE
> data.df.avg <- lapply(data.df,mean)
> is.list(data.df.avg)
[1] TRUE
> data.df.avg
$VAR1
[1] 1.5

$VAR2
[1] 3.5



sapply function

sapply(list, function, ..., simplify)

用途:
跟lapply类似,同样是应用指定function到指定list。不过当simplify=TRUE(默认)时,输出会根据结果简化为vector或者matrix。当simplify=FALSE时,输出通lapply一样为list。
例子:

> data.df.max <- sapply(data.df,max)
> is.vector(data.df.max)
[1] TRUE
> data.df.max
VAR1 VAR2
   2    4



tapply function

tapply(array, indices, function, ..., simplify)

用途:
这个要复杂一点,是将指定function应用到根据指定indices归类的array元素上。输出结果根据function不同而不同。如果function返回值是一个数值的话,则结果是matrix;如果function返回多个数值的话,则结果是list。
例子:

> data2 <- as.data.frame(cbind(rnorm(16),rep(c(1,2,3,4),4),rep(c(1,2),each=8)))
> colnames(data2) <- c("Result","VAR1","VAR2")
> data2.avg1 <- tapply(data2$Result,data2$VAR1,mean)
> data2.avg12 <- tapply(data2$Result,list(data2$VAR1,data2$VAR2),mean)
> data2.avg1
         1          2          3          4
 0.6939699 -0.5911505  0.1732157 -0.3221063
> data2.avg12
           1          2
1  0.7874465  0.6004933
2  0.1342668 -1.3165678
3 -0.1910606  0.5374919
4 -0.4412965 -0.2029161
posted @ 2014-08-26 17:36  subsir  阅读(1779)  评论(0编辑  收藏  举报