其他
让你的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")))
计算相关系数
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]详细了解!
参考资料
bigstatsr包github地址:: https://github.com/privefl/bigstatsr
以上就是今天的内容,希望对你有帮助哦!欢迎点赞、在看、关注、转发!
欢迎在评论区留言或直接添加我的微信!
欢迎关注公众号:医学和生信笔记
“医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!
往期回顾
长宽数据转换的特殊情况
长数据变为宽数据的7种情况!
宽数据变为长数据的5种情况!
R语言处理因子之forcats包介绍(1)