• 给你的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分析、网络药理学、临床预测模型、机器学习、生物信息学等。

  • 相关阅读:
    【云原生】DevOps 新纪元 | 史前的惨淡现实
    华为机试HJ9
    常用数据库的 API - 开篇
    人工智能基础_机器学习041_Sigmoid函数详解_Sigmoid损失函数推导_最大似然函数推导---人工智能工作笔记0081
    求longhorn winlogon 4074 x64修改过后文件或手动修改方法
    Redis --- 位图
    easyExcel使用场景
    【OpenCV-Python】教程:3-15 分水岭图像分割
    我找回了我喜欢的Github Old Feed
    正点原子STM32MP157开发板加载驱动模块报错:Unknown symbol __gnu_mcount_nc (err -2)
  • 原文地址:https://blog.csdn.net/Ayue0616/article/details/126107014