我对vegdist函数有一些问题。我想用jaccard计算一个距离矩阵。我有二进制数据。
问题是我有一个由138037行(站点)和89列(物种)组成的矩阵。我的剧本是:
library("vegan")
memory.limit(size = 100000) # it gives 1 Tera from HDD in case ram memory is over
DF=as.data.frame(MODELOS)
DF=na.omit(DF)
DISTAN=vegdist(DF[,2:ncol(DF)],"jaccard")或更可责备的:
nsites <- 138037
nspp <- 89
DF <- matrix(0,nrow=nsites,ncol=nspp)
DISTAN=vegdist(DF,"jaccard")它几乎立即产生错误:
Error in double(N * (N - 1)/2) : vector size specified is too large我认为这是一个内存错误,但我不知道为什么,如果我有一个32´的内存和1Tera硬盘的pc。
我还尝试使用package的函数dist执行dist矩阵:
library(proxy)
vector=dist(DF, method = "Jaccard")它开始运行,但当它达到10 GB的内存,一个窗口宣布R提交了一个错误,它将关闭,因此它关闭并启动一个新的部分。
我真的不知道这是怎么回事,怎么解决这个问题,有人能帮我吗?
发布于 2013-02-08 23:47:34
N <- 138037; log10(N*(N-1)/2)显示,您正在尝试使用10^9.98 =几乎10^10 (100亿)不同元素计算dist对象。发布的R版本只能处理小于2^31-1元素(log10(2^31-1)=9.3)的对象,而不考虑可用的内存量。这个限制在R的开发版本 (搜索“长向量”)中是放松的;参见R中向量的最大长度。但是,更大的问题是:您实际上打算用一个包含100亿个不同元素的距离矩阵来做吗?如果你更多地解释一下你想要做的事情的背景,你可能会得到一些更有用的答案(例如,不仅仅是“为什么会发生这种事?”但是“我能做些什么呢?”)。没有更多的上下文,我所能说的就是“尝试切换到R的开发版本,看看它是否有用”(但它可能没有帮助;长向量并不支持R的所有方面,尤其是在使用底层C或FORTRAN源代码的代码中)。
我不知道为什么proxy::dist会给出不同的错误行为。
https://stackoverflow.com/questions/14782758
复制相似问题