#tapply    #对向量的子集进行操作
#tapply参数):tapply(向量,因子,函数)

x=c(rnorm(5),runif(5),rnorm(5,1))
x
##  [1]  0.51151761 -0.21053255 -1.27966730  1.06379438 -0.08071964
##  [6]  0.76615652  0.93555260  0.12845367  0.74493294  0.59556613
## [11]  0.18575110  0.06784031 -0.07200961 -1.20696432 -0.14276227
#x这个向量包含15个元素
#他的前五个元素来自于正态分布
#中间五个数据来自于均匀分布
#最后五个数据来自于均值为一,标准差为0的正态分布
f=gl(3,5)
#接下来我们需要建立一个因子,用f表示,建立因子需要用到一个新的函数gl
#gl需要两个参数,第一个参数3代表他有3个水平(levels)
#第二个参数代表的是每个水平下有多少个元素,表示每个水平下有五个元素。
f
##  [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
## Levels: 1 2 3
tapply(x, f, mean)#对x这个向量按f因子的水平进行分组,每一组求平均值
##             1             2             3 
##  0.0008784998  0.6341323719 -0.2336289573
#x数据中前五个数据是和f中的前五个1对应的,所以上述命令得出的结果,中的1表示x中前五个数据的均值,2表示中间五个数据的均值,3下面的数据表示x中最后五个数据的均值

tapply(x,f,mean,simplify = FALSE)
## $`1`
## [1] 0.0008784998
## 
## $`2`
## [1] 0.6341324
## 
## $`3`
## [1] -0.233629