zoukankan      html  css  js  c++  java
  • R语言apply函数家族

    http://biobio2010.blogspot.com/2011/04/apply.html

    R语言apply函数家族

    首先apply函数并不是不循环,而是不在R里循环。它的循环是通过C实现的。
    其次,它不一定比其它循环方式快。
    个人认为,向量化 > apply >  for 速度前者优于后者。

    apply(X, margin, FUN, ...)
    操作对象:matrix, array或data frame
    操作方式:抽取matrix或data.frame的每行或每列,作为vector执行指定FUN
    返 回 值:vector(如果FUN返回一个值), matrix(如果FUN返回一个固定长度的vector,按列排列),或list(如果FUN返回长度不同的vector)
    实 例
    mx=matrix(1:100,nrow=10)
    apply(mx, 1, min) #对矩阵mx按第1下标-行-求最小值
    apply(mx, 2, max) #对矩阵mx按第2下标-列-求最大值, colMeans(mx)
    其 它
    mx可以是多维array,magin也可以指定多个维度
    mx=array(1:100,c(4,5,5))
    apply(mx, 3, mean)#按第3下标求均值,mean(mx[,,1])
    apply(mx, c(1,2), mean) #按第1,2下标求均值,mean(mx[1,1,])
    FUN可以是任意函数,包括自定义函数及命令内部编写的函数
    apply(mx, 2, function(x) mean(x, trim=0.1))
    apply(mx, 2, function(x) c(median(x),mean(x)))
    FUN的参数,可放在函数后面以传值给函数
    apply(mx, 2, mean, trim=0.1)

    lapply(X, FUN, ...)
    操作对象:list, data.frame (不能用于matrix或array)
    操作方式:针对list的每一个元素执行FUN (如果操作对象是data.frame,按列执行FUN)
    返 回 值:与输入list等长的list

    sapply(X, FUN, ..., simplify=T, USE.NAMES=T)
    操作对象:list 简化版的lapply
    操作方式:针对list的每一个元素执行FUN
    返 回 值:vector, matrix或list

    tapply(X, INDEX, FUN=NULL, ..., simplify=T)
    操作对象:vector
    操作方式:把vector根据INDEX(比如因子)分组,对每一组执行FUN
    返 回 值:array或list
    实 例
    y = rnorm(100)
    cat1 = gl(10,10,length=100,labels=LETTERS[1:10])
    tapply(y,cat1,mean)
    cat2 = gl(5,2,length=100,labels=letters[1:5])
    tapply(y,list(cat1,cat2),mean)

    sweet(mx,margin,stats,FUN,...)
    操作对象:array
    操作方式:把mx根据FUN操作stats指定的统计值
    返 回 值:与第一参数相同维度的array
    实 例
    a = matrix(rnorm(100), 10)
    sweet(a, 2, colMeans(a), "-") #a的所有元素减去其所在列的均值a[m,n]-mean(a[,n])
    sweet(a, 1, rowSums(a), "/")

    aggregate()

    by()

  • 相关阅读:
    我只想拍到这样的美景
    [转]为什么开发人员工作10多年了还会迷茫?没有安全感?
    【java入门系列】封装特性
    【java入门系列】继承特性
    【java入门系列】类和对象
    【java入门系列】导航篇
    数据库事务四大特性
    POI操作Excel
    mysql-优化
    mysql-强化
  • 原文地址:https://www.cnblogs.com/lexus/p/2274518.html
Copyright © 2011-2022 走看看