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

    R语言为脚本语言,运算速度较慢,使用for循环等控制流会导致整个运算更慢
    
    为此,R官方推出了apply家族,意在提供快速强大的循环操作。
    
    apply经常配合R函数或自定义函数使用
    
    #apply(matrix/array,1/2/3,fun)
    #第一个参数需为矩阵或数组
    #第二个参数1表示按行,2表示按列,3表示按数组中的表格
    #第三个参数表示执行的函数
    #计算行合计、列合计、合计
    x <- cbind(x1 = 3, x2 = c(4:1, 2:5));x
    dimnames(x)[[1]] <- letters[1:8];x
    apply(x, 2, mean, trim = .2)
    col.sums <- apply(x, 2, sum)
    row.sums <- apply(x, 1, sum)
    rbind(cbind(x, Rtot = row.sums), Ctot = c(col.sums, sum(col.sums)))
    lapply表示list apply,无第二个参数,第三个参数同apply
    
    其他sapply、vapply、mapply、tapply用的很少,各取所取吧
    
     
    
    关于sapply的应用:
    
    mystats <- function(x,na.omit=FALSE){   #一个函数返回x的多个描述性统计量
      if (na.omit)
        x <- x[!is.na(x)]
      m <- mean(x)
      n <- length(x)
      s <- sd(x)
      return(c(n=n,mean=m,stdev=s))
    }
    
    dstats <- function(x)sapply(x, mystats) #将mystats(自定义函数)应用到x的每一列
     
    dstats <- function(x)apply(x, 2, mystats) #apply加第二个参数,表示函数执行在列
    
    dstats <- function(x)lapply(x, mystats) #lapply,输出为一个list,结果不  好 看
    
    by(mtcars[1,4,7],mtcars$am,dstats) #第二个参数定义分组,am列只有1,2
    #data$ 和 data[,2]数据均为横向显示,而data[2]则为纵向,次数sapply需要纵向数据
    aggregate(cholesterol$response,by=list(cholesterol$trt),FUN=mean)
    #方差分析时,数据类型为纵向,第一列为组别号,第二列为响应变量,同时求不同组下的均数
    
    完成一个任务,同时批量输出R data按照某列值分组下 指定列 的若干统计量(funciton),get!
    
     
    Valar morghulis
  • 相关阅读:
    Token的生成和检验
    MD5和SHA加密实现
    服务器读取客户端数据
    服务器上传和下载文件
    NOI模拟题4 Problem B: 小狐狸(fox)
    NOI模拟题4 Problem A: 生成树(mst)
    混凝土数学第四章之数论学习笔记
    混凝土数学第二章和式之有限微积分 ( 离散微积分 ) 学习笔记
    网络流相关学习笔记
    NOI模拟题1 Problem A: sub
  • 原文地址:https://www.cnblogs.com/super-yb/p/11049660.html
Copyright © 2011-2022 走看看