查看原文
其他

让你的R再次提速!!!

阿越就是我 医学和生信笔记 2023-02-25
关注公众号,发送R语言,获取学习资料!
 日拱一卒 功不唐捐

前面介绍了一个给R语言提速的方法:让R运算速度快100倍!!!


今天给大家再介绍一个优秀的R包,让你的R运行速度再快几百倍!!!

简介

包的作者是一位人类遗传学的博士生,需要处理的数据都是量级非常大的,但是作者非常喜欢用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")))
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

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

其他强大的功能

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

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

参考资料

[1]

bigstatsr包github地址:: https://github.com/privefl/bigstatsr




以上就是今天的内容,希望对你有帮助哦!欢迎点赞、在看、关注、转发

欢迎在评论区留言或直接添加我的微信!


欢迎关注公众号:医学和生信笔记

医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!


往期回顾




宽数据转换的特殊情况


数据变为宽数据的7种情况!


宽数据变为长数据的5种情况!


R语言处理因子之forcats包介绍(1)


R语言处理因子之forcats包介绍(2)

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存