8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

分组函数(tapply、by、aggregate)和 *apply 系列

Gereon will not feed AI 2月前

95 0

每当我想在 R 中执行 \'map\'py 操作时,我通常会尝试使用 apply 系列中的函数。但是,我从未完全理解它们之间的区别 -- 如何 {sapply、lapply 等}...

每当我想在 R 中执行某些\'map\'py 操作时,我通常会尝试使用该 apply 系列中的函数。

然而,我从来没有完全理解它们之间的区别——{ sapply , lapply 等} 如何将函数应用于输入/分组输入,输出会是什么样子,甚至输入可以是什么——所以我经常只是仔细检查它们直到得到我想要的。

有人可以解释一下何时如何使用哪一个吗?

我目前的理解(可能不正确/不完整)是......

  1. p5

  2. p6

  3. apply(matrix, 1/2, f) :输入是一个矩阵。输出是一个向量,其中元素 i 是 f(矩阵的第 i 行/第 i 列)
  4. tapply(vector, grouping, f) :输出是一个矩阵/数组,其中矩阵/数组中的元素是 f 向量分组 g ,并 g 被推送到行/列名称
  5. by(dataframe, grouping, f) :设为 g 分组。应用于 f 组/数据框的每一列。漂亮地打印分组和 f 每列的值。
  6. aggregate(matrix, grouping, f) :类似于 by ,但聚合不会漂亮地打印输出,而是将所有内容粘贴到数据框中。

附带问题:我还没有学过 plyr 或 reshape - 是否会 plyr 完全 reshape 取代这些?

帖子版权声明 1、本帖标题:分组函数(tapply、by、aggregate)和 *apply 系列
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Gereon will not feed AI在本站《list》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 尽管这里有很多很棒的答案,但还有两个基本函数值得一提,即有用的 outer 函数和模糊的 eapply 函数

    outer 是一个非常有用的功能,但却隐藏在普通功能中。如果你阅读帮助,你 outer 会发现它的描述是这样的:

    The outer product of the arrays X and Y is the array A with dimension  
    c(dim(X), dim(Y)) where element A[c(arrayindex.x, arrayindex.y)] =   
    FUN(X[arrayindex.x], Y[arrayindex.y], ...).
    

    这看起来似乎只对线性代数类型的东西有用。但是,它的用法很像 mapply 将函数应用于两个输入向量。不同之处在于, mapply 将函数应用于前两个元素,然后应用于后两个元素,等等,而 outer 将函数应用于第一个向量中的一个元素和第二个向量中的一个元素的每个组合。例如:

     A<-c(1,3,5,7,9)
     B<-c(0,3,6,9,12)
    
    mapply(FUN=pmax, A, B)
    
    > mapply(FUN=pmax, A, B)
    [1]  1  3  6  9 12
    
    outer(A,B, pmax)
    
     > outer(A,B, pmax)
          [,1] [,2] [,3] [,4] [,5]
     [1,]    1    3    6    9   12
     [2,]    3    3    6    9   12
     [3,]    5    5    6    9   12
     [4,]    7    7    7    9   12
     [5,]    9    9    9    9   12
    

    当我有一个值向量和一个条件向量并希望看到哪些值满足哪些条件时,我个人使用过这个。

    申请

    eapply 类似于 lapply ,只不过它不是将函数应用于列表中的每个元素,而是将函数应用于环境中的每个元素。例如,如果您想在全局环境中查找用户定义函数的列表:

    A<-c(1,3,5,7,9)
    B<-c(0,3,6,9,12)
    C<-list(x=1, y=2)
    D<-function(x){x+1}
    
    > eapply(.GlobalEnv, is.function)
    $A
    [1] FALSE
    
    $B
    [1] FALSE
    
    $C
    [1] FALSE
    
    $D
    [1] TRUE 
    

    坦率地说,我并不经常使用它,但如果您正在构建很多包或创建很多环境,它可能会派上用场。

返回
作者最近主题: