文章目录

  • 简介
  • 安装
  • 简单例子
  • 计算相关系数
  • 其他强大的功能


简介

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

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

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

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

安装

# CRAN 
install.packages("bigstatsr")
# github
remotes::install_github("privefl/bigstatsr")

简单例子

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")))

R语言无法分配 r语言builtin_R语言无法分配

计算相关系数

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

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

其他强大的功能

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