首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R在使用函数DIST时中止(110 GB矢量)

R在使用函数DIST时中止(110 GB矢量)
EN

Stack Overflow用户
提问于 2021-04-19 15:49:33
回答 2查看 40关注 0票数 0

我需要在一个有173000行和17列的数据集上运行R中的分层聚类算法。在数据集上运行dist()函数时,R将中止。我也在Windows pc上尝试过,得到的错误信息是“无法分配大小为110.5 Gb的向量”。

我的Mac和Windows pc有4 GB的RAM。

在R中有没有办法做到这一点?我知道分层算法对于大型数据集并不是最好的,但它是大学作业所必需的。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2021-04-19 16:38:40

这个问题可以通过编写一个函数来计算数据集的列之间的成对欧几里得距离来解决,下面假设是表格形式的。对于其他距离,可以编写类似的函数。

代码语言:javascript
复制
dist2 <- function(X){
  cmb <- combn(seq_len(ncol(X)), 2)
  d <- matrix(NA_real_, nrow = ncol(X), ncol = ncol(X))
  if(!is.null(colnames(X)))
    dimnames(d) <- list(colnames(X), colnames(X))
  
  for(i in seq_len(ncol(cmb))){
    ix <- cmb[1, i]
    iy <- cmb[2, i]
    res <- sqrt(sum((X[, ix] - X[, iy])^2))
    d[ix, iy] <- d[iy, ix] <- res
    diag(d) <- 0
  }
  
  d
}

现在使用问题中维度的data.frame测试函数。

代码语言:javascript
复制
set.seed(2021)
m <- replicate(17, rnorm(173000))
m <- as.data.frame(m)

dist2(m)
票数 2
EN

Stack Overflow用户

发布于 2021-04-19 16:00:00

首先也是最重要的,如果你能提供一个reprex (可重现的例子),那就太好了。请确保您稍后会这样做。

说到这个问题,你可以使用sample_frac函数(如果我没记错的话,这是一个来自tidyverse包的函数)。例如,sample_frac(your_data, .5)将对50%的数据帧进行采样。它将减少要群集的数据的大小,并使您的笔记本电脑更容易。

另一种方法是扩展memory.limit(size = n),其中n是以in为单位的数字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67157945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档