• 给你的R语言再次提速


    获取更多R语言知识,请关注公众号:医学和生信笔记

    医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化。主要分享R语言做医学统计学、meta分析、网络药理学、临床预测模型、机器学习、生物信息学等。

    简介

    包的作者是一位人类遗传学的博士生,需要处理的数据都是量级非常大的,但是作者非常喜欢用R语言,众所周知,R语言很慢!所以作者才开发了这个包解决自己的实际需求!

    R包bigstatsr提供了大规模矩阵数据进行快速统计分析的函数。主要是使用了FBM(filebacked big matrices)和内存映射(memory-mapping)技术。

    不光是生物信息学的数据,其他的类似数据都可以使用这个包进行处理哦!

    注意:此包的多数算法都不能处理缺失值!

    安装

    # CRAN 
    install.packages("bigstatsr")
    # github
    remotes::install_github("privefl/bigstatsr")
    
    • 1
    • 2
    • 3
    • 4

    简单例子

    library(bigstatsr)
    
    # 创建数据
    X <- FBM(5e3, 10e3, backingfile = "test")$save()
    
    # 随机填充数据
    U <- matrix(0, nrow(X), 5); U[] <- rnorm(length(U))
    V <- matrix(0, ncol(X), 5); V[] <- rnorm(length(V))
    NCORES <- nb_cores()
    
    # X = U V^T + E,进行运算
    big_apply(X, a.FUN = function(X, ind, U, V) {
      X[, ind] <- tcrossprod(U, V[ind, ]) + rnorm(nrow(X) * length(ind))
      NULL  
    }, a.combine = 'c', ncores = NCORES, U = U, V = V)
    
    # 查看部分值
    X[1:5, 1:5]
    
    # 分界奇异值,快速计算
    obj.svd <- big_randomSVD(X, fun.scaling = big_scale(), ncores = NCORES)
    plot(obj.svd)
    
    # 结束
    #unlink(paste0("test", c(".bk", ".rds")))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    image-20220329211510159

    计算相关系数

    mat <- X[]
    dim(mat) #5000行,1000列的矩阵求相关系数,运算量很大了!
    
    system.time(corr1 <- cor(mat)) #343.36   0.22 343.57
    
    # 快了不是一点点!
    system.time(corr2 <- big_cor(X)) #24.94  2.58  2.21 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    可以看到,快了不是一点点,***直接从343秒变成了2.21秒!***这还是在我的电脑更换了openblas的情况下!

    其他强大的功能

    除此之外,还提供了很多其他有用的函数和功能,比如联合Rcpp,一些线性模型运算,弹性网络等,还可以使用并行运算更加快速。

    快速运算的重要基础就是使用了FBM,大家可以去作者的Github详细了解!

    获取更多R语言知识,请关注公众号:医学和生信笔记

    医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化。主要分享R语言做医学统计学、meta分析、网络药理学、临床预测模型、机器学习、生物信息学等。

  • 相关阅读:
    2.0SpingMVC使用RESTful
    数组与链表算法-数组与多项式
    webpack5内部是如何处理模块化的?
    带妹妹学密码系列二(基础知识篇)
    牛客 HJ18 识别有效的IP地址和掩码并进行分类统计
    记录一个@Transaction注解引发的bug
    为何海量计算机系毕业生“负债”报IT培训班?高校IT教育该如何变革?
    记一次Postgresql从堆叠注入到RCE
    数据驱动 vs 关键字驱动:对搭建UI自动化测试框架的探索
    c#自动生成缺陷图像-添加从待匹配目标文件夹图像及xml移动至指定目标文件中功能--20240612
  • 原文地址:https://blog.csdn.net/Ayue0616/article/details/126107014