【问题标题】:vegan::vegdist: Error in double(N * (N - 1)/2) : vector size specified is too largevegan::vegdist: double(N * (N - 1)/2) 中的错误:指定的向量大小太大
【发布时间】:2013-02-09 22:11:00
【问题描述】:

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

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

我还尝试使用包代理中的函数dist 做一个 dist 矩阵:

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

它开始运行,但是当它达到 10 GB 的内存时,一个窗口宣布 R 犯了一个错误,它将关闭,所以它关闭并开始一个新的部分。

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

【问题讨论】:

  • 请将您的问题和标题编辑为英文,本网站上的所有内容都应以英文书写(包括错误消息)
  • 有什么特别的原因为什么会被标记为 PHP?
  • @user2055974 您可以设置Sys.setenv(LANG = "en") 以便用英文重现错误消息。见this post
  • 你不应该在 StackOverflow 和 R-help 之间交叉发布:article.gmane.org/gmane.comp.lang.r.general/286593(Brian Ripley 给你的答案和我几乎一样,下面......)

标签: r vegan


【解决方案1】:

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

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

【讨论】:

  • 感谢您回答我,我想从哥伦比亚安第斯山脉的一个研究区域的 1 lkm^2 的 138037 个像素中做一个层次聚类。我有 89 个物种的分布模型,所以我有一个矩阵,其中行中的像素和列中的物种,并且每个像素的每个物种的缺席(0)/存在(1)充满。我认为更大的问题是,对于层次集群中的聚集方法,我需要孔矩阵,所以我不能分割它。
  • 对于层次集群中的聚集方法,我需要孔矩阵,所以它不能被分割我做了一些面积较小的教授,它可以工作,代码 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, “病房”)
  • 我现在没有时间深入研究这个问题,但我建议您可以通过r-sig-ecology@r-project.org 邮件列表寻求帮助。我会尝试为您的问题提供广泛的背景:可能有一种不同的技术可以有效地回答您的 biological 问题,并且计算负担更少。 (你真的需要 1 公里像素,还是变化的规模似乎比这更大?)
猜你喜欢
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 2020-07-15
相关资源
最近更新 更多