《Learning R》笔记 Chapter 9 下 plyr包中的循环

plyr包提供了多种方便的函数。在这里只简单整理里面的apply族函数。
plyr族的apply形式统一为**apply。 两个 * 可以取的字符有l,d,a,r,_ 。 二者分别代表

 _ = 无输出
l = list
d= dataframe
r = replicate
a = array

例如laply意为输入list,结果按照array返回,功能类似sapply
daply输入dataframe,按照某个vector进行拆分后再运行函数,最后输出array。详情参考帮助文档。
raply,rdply,rlply,r_ply都能够将一个函数重复运行n次,再将结果按照不同方式输出。r_ply无输出结果。

> raply(5,rnorm(2)) #输出matrix
              1          2
[1,]  0.3883049 -0.2169678
[2,] -1.7860011 -1.8977570
[3,]  0.3863878 -0.3025431
[4,]  0.3239897 -1.2374434
[5,]  1.6825482  1.6953424
> rdply(5,rnorm(2)) #输出dataframe
  .n         V1         V2
1  1 -0.8975326 -2.3684047
2  2 -0.8796698  0.4489358
3  3 -1.0913203  0.4137911
4  4 -0.1927564  0.2688524
5  5 -0.1176810  2.0811032

ddply则是tapply的进化形式。它能够将dataframe按照某些标准分拆为sub-dataframe,再运行函数,最后输出dataframe作为结果。

ddply(.data, .variables, .fun = NULL, ..., .progress = "none",
  .inform = FALSE, .drop = TRUE, .parallel = FALSE, .paropts = NULL)

> ddply(Orange, # .data
    .(Tree), # .variables 这里的括号里可以有多个factor
    summarize, #指定function的应用范围
    avg.age = mean(age), avg.circ = mean(circumference))

  Tree  avg.age  avg.circ
1    3 922.1429  94.00000
2    1 922.1429  99.57143
3    5 922.1429 111.14286
4    2 922.1429 135.28571
5    4 922.1429 139.28571

如果在function部分指定为colwise(某函数名) , 则表示将某函数用于除了 .variables之外的所有column;这种方式较为快捷,但一次只能传递入1个函数。
如果指定为summarize,则可以更详细地指定。

> ddply(Orange, .(Tree), colwise(sd))
  Tree      age circumference
1    3 523.6298      42.98062
2    1 523.6298      43.29302
3    5 523.6298      58.85980
4    2 523.6298      66.32424
5    4 523.6298      71.89741

你可能感兴趣的:(《Learning R》笔记 Chapter 9 下 plyr包中的循环)