• 【R语言】【3】apply,tapply,lapply,sapply,mapply与par函数相关参数


    前言

    R语言绘图虽然看着简洁,但是函数参数实在是太多了——虽然学了4天,但是像是学了一周,其实我目前目的是画好看的图,那么如果有绘图模板就好了。由于买的书中的函数调用太多简洁,df$SOD等变量数据不知从何而来,所以要自己积累模板了。

    这里存在一些问题,虽然学了知识就算忘了也有印象,但是忘的太多又要重学!比如几个月或是几年才捡起来,用几次的matlab,每次都要重敲一两天的语法代码和绘图代码,才能找到感觉……


             \;\\\;\\\;

    apply

    m <- array(
      c(1:10),
      dim=c(2,5)
      # byrow=TRUE #按行填充 array没有这个参数
    )
    m
    a=apply(m,1,sum)   #按行求和
    a
    a=apply(m,2,sum)   #按列求和
    a
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    > m
         [,1] [,2] [,3] [,4] [,5]
    [1,]    1    3    5    7    9
    [2,]    2    4    6    8   10
    > a
    [1] 25 30
    > a
    [1]  3  7 11 15 19
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    a <- array(
      c(1:8),
      dim=c(2,2,2)
    )
    a
    res=apply(a,1,sum)    #第1层2x2,第2层2x2
    res
    res=apply(a,2,sum)    #第1片2x2,第2片2x2
    res
    res=apply(a,c(1,2),sum)   #6根1x2
    res
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    > a
    , , 1
    
         [,1] [,2]
    [1,]    1    3
    [2,]    2    4
    
    , , 2
    
         [,1] [,2]
    [1,]    5    7
    [2,]    6    8
    > res
    [1] 16 20
    > res
    [1] 14 22
    > res
         [,1] [,2]
    [1,]    6   10
    [2,]    8   12
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

             \;\\\;\\\;

    tapply 分组计算

    v <- c(1:5)
    v
    group <- c(rep('a',3),rep('b',2))
    group
    
    #a b
    #6 9
    tapply(v,group,sum)  #按group分组,将对应的v中的元素加起来
    
    
    
    mat <- matrix(c(1:10),nrow=2)
    mat
    group <- matrix(c(rep(1,5),rep(2,5)),nrow=2)
    group
    
    # 1  2
    #15 40
    # tapply(mat,group,sum)  #按group分组,将对应的mat中的元素加起来
    
    #1 2
    #3 8
    tapply(mat,group,mean) #按group分组,将对应的mat中的元素加一起求均值
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

             \;\\\;\\\;

    lapply 多元素按行分组计算

    需要转成data.frame

    l <- list(
      a=c(1:5),
      b=c(6:10)
    )
    #返回一个list
    res <- lapply(l,mean )   # 3 8
    #转成data.frame
    res <- as.data.frame(res)
    res
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    > res
      a b
    1 3 8
    
    • 1
    • 2
    • 3
    rownames <- paste('a',LETTERS,sep='#')
    rownames
    
    #去掉前缀a#
    names <- unlist(lapply(
      strsplit(rownames,'#'),
      function(x) x[2]   #取第二个元素
    ))
    names
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    > rownames
     [1] "a#A" "a#B" "a#C" "a#D" "a#E" "a#F" "a#G" "a#H" "a#I"
    [10] "a#J" "a#K" "a#L" "a#M" "a#N" "a#O" "a#P" "a#Q" "a#R"
    [19] "a#S" "a#T" "a#U" "a#V" "a#W" "a#X" "a#Y" "a#Z"
    > names
     [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N"
    [15] "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

             \;\\\;\\\;

    sapply 简化版lapply

    l <- list(
      a=c(1:5),
      b=c(6:10)
    )
    sapply(l,mean,simplify=T) #T表示不用unlist了
    
    • 1
    • 2
    • 3
    • 4
    • 5
    a b 
    3 8 
    
    • 1
    • 2

             \;\\\;\\\;

    mapply 多data计算

    #可以传入多个data
    mapply(
      sum,
      list(a=1,b=2,c=3),
      list(a=10,b=20,d=30)
    )
    
    mapply(
      sum,
      list(a=1,b=2,c=3),
      list(a=10,b=20,c=30),
      list(a=15,b=25,d=35)
    )
    
    mapply(
      function(x,y) x%%y,
      c(1:50),
      c(1:10)
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

             \;\\\;\\\;

    par

    bty 图的围边

    par(mfrow=c(3,2))
    bty <- c('o','l','7','c',']','u')    #bty是图的围边
    for(i in 1:6){
      par(bty=bty[i])
      plot(1:5,main=paste('bty=',bty[i],sep=':'))
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

             \;\\\;\\\;

    fg/bg 前景/背景

    前景就是图的围边

    par(
      fg='red',          #前景(边框)
      bg='white'         #背景
    )
    par(mfrow=c(1,1),
        font=3,          #1普通,2粗体,3斜体,4粗斜体
        family='serif')  #字体serif就是Times New Roman
    
    
    #气泡图
    plot(1:5,
         main="Times New Roman",
         cex=1:5,        #cex是点的大小
         col=1:5         #col是颜色
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

             \;\\\;\\\;

    las 坐标轴横竖数字

    #las表示坐标轴数字的横竖
    par(mfrow=c(2,2))
    for( i in 0:3){
      par(las=i)
      plot(1:5,main=paste('las=',i))
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

             \;\\\;\\\;

    lty 线的类型

    par(mfrow=c(2,3))
    for( i in 1:6){
      par(lty=i,lwd=i/2)   #lwd默认是1,线段粗细
      plot(1:5,type='l',main=paste('lty=',i),sub='subtitle')
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

             \;\\\;\\\;

  • 相关阅读:
    Spring 事务传播机制源码浅析——PROPAGATION_PROPAGATION_NESTED 事务嵌套
    中医自学平台---前端网站
    WPF 控件小技巧记录(持续更新)
    【CVPR2020】DEF:Seeing Through Fog Without Seeing Fog论文阅读分析与总结
    Android Studio Flutter真机调试错误
    Ansible 企业级自动化运维平台开发实战
    修改WPF程序集名称报错
    Oracle 创建表语句
    [大数据]docker搭建Hadoop
    第五届全国高校计算机能力挑战赛-程序设计挑战赛(C++)
  • 原文地址:https://blog.csdn.net/weixin_41374099/article/details/126072043