2013-02-08 129 views
0

我有一些vegdist函数的问题。我想用jaccard来计算距离矩阵。我有二进制数据。vegan :: vegdist:双倍错误(N *(N-1)/ 2):指定的向量大小过大

问题是我有一个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 

我认为这是一个内存错误,但我知道鸵鸟政策为什么如果我有一台带有32GB内存和1 Tera硬盘的电脑。

我也尝试从包代理做DIST矩阵功能dist

library(proxy) 
vector=dist(DF, method = "Jaccard") 

它开始运行,但是当它到达10 GB的RAM,一个窗口公布的R犯了一个错误,它将关闭,因此它关闭并开始一个新的部分。

我真的不知道发生了什么事,也不知道如何解决这个问题,任何人都可以帮助我吗?

+2

请编辑您的问题和标题为英文,本网站上的所有内容均应使用英文书写(包括错误消息) – thaJeztah 2013-02-08 23:13:24

+1

有什么特别的理由说明这是被标记为PHP的吗? – 2013-02-08 23:16:08

+0

@ user2055974您可以设置'Sys.setenv(LANG =“en”)'以重现英文错误信息。请参见[本文](http://stackoverflow.com/questions/13575180/how-to-change-the-language-of-errors-in-r) – 2013-02-08 23:16:20

回答

0

N <- 138037; log10(N*(N-1)/2)表明您正在尝试计算一个dist对象,其中10^9.98 =几乎10 10(100亿)个不同的元素。 R的发布版本只能处理少于2^31-1个元素的对象(log10(2^31-1)=9.3),而不管可用的内存量如何。这个限制在the development version of R(搜索“LONG VECTORS”)中放宽;另请参阅Max Length for a Vector in R。但更大的问题是:你实际计划的do与距离矩阵有100亿个不同的元素?如果你更多地解释你想要做的事情的背景,你可能会得到一些更有用的答案(即不只是“为什么会发生这种情况?”而是“我能做些什么?”)。没有更多的上下文,我只能说“尝试切换到R的开发版本,看看是否有帮助”(但它可能不是;在R的所有方面都不支持长向量,特别是在不使用底层C的代码中或FORTRAN来源)。

我不知道为什么proxy::dist会给出不同的错误行为。

+0

谢谢你回答我,我想要从哥伦比亚安第斯山脉的一个研究区域,以1lkm^2的138037个像素做一个等级聚类。我有89种物种的分布模型,所以我有一个矩阵,列中的行和物种的像素,并且每个像素的每个物种都没有(0)/存在(1)。我认为更大的问题是,对于层次聚类中的聚集方法,我需要孔矩阵,所以我不能将其分开。 – user2055974 2013-02-11 15:55:11

+0

同样对于层次聚类中的聚集方法,我需要孔矩阵,所以它不能被分割我做了一些面积较小的教授,它的工作原理,代码MODELOS = stack(list.files(pattern =“*。tif $”) DF = as.data.frame(MODELOS) DF = na.omit(DF) DISTAN = vegdist(DF [,2:ncol(DF)],“jaccard”)E1 = hclust(DISTAN,“病房”) – user2055974 2013-02-11 16:23:57

+0

我现在没有时间深入研究这个问题,但是我建议你可以在'r-sig-ecology @ r-project.org'邮件列表上寻求帮助,我会尽量给出广泛的上下文你的问题:可能有一种不同的技术可以有效地回答你的*生物*问题,计算负担较小(你真的需要1公里的像素,还是变异的尺度看起来大于那个? ) – 2013-02-11 17:19:15