美文网首页计算机@linux_python_R 技术帖
「R基础」用sweep对矩阵按列计算

「R基础」用sweep对矩阵按列计算

作者: xuzhougeng | 来源:发表于2019-11-02 19:43 被阅读0次

    在我研究生一年级的时候,我用R语言分析转录组时遇到了一个问题,如何对样本按照文库进行标准化,假设我手头的数据如下

    mdat <- matrix(c(1,2,3, 11,12,13), nrow = 2, ncol = 3)
    mdat
    
         [,1] [,2] [,3]
    [1,]    1    3   12
    [2,]    2   11   13
    

    我当时用了一个错误的方法

    depth <-  colSums(mdat)
    mdat / depth 
    

    虽然这个时候运行没有出错,但其实结果存在问题。因为R语言的自动补全和R语言按列操作的特性,实际上我得到的是

    1 / 2  3 / 25 12 /14
    2 /14 11 / 2  13 /25
    

    当时我的解决方法是,对数据进行转置

    t(t(mdat ) / colSums(mdat))
    

    今天我在阅读scale的函数说明和源代码时发现了一个新的函数sweep, 能够按行按列调用函数以提供的值处理原始的数据

    sweep(mdat, 2, depth, "/")
    

    通过我对源代码的检查,发现sweep本质上还是调用了转置函数aperm,针对于数组转置,而t() 是针对于矩阵转置。因此使用sweep不会有速度上的提升,只是代码更加简洁了。

    相关文章

      网友评论

        本文标题:「R基础」用sweep对矩阵按列计算

        本文链接:https://www.haomeiwen.com/subject/kyshbctx.html