Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R在使用函数DIST(110 GB向量)时中止_R_Macos_Ram_Hierarchical Clustering_Hierarchical - Fatal编程技术网

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

R在使用函数DIST(110 GB向量)时中止,r,macos,ram,hierarchical-clustering,hierarchical,R,Macos,Ram,Hierarchical Clustering,Hierarchical,我需要在一个包含173000行和17列的数据集上运行R中的分层聚类算法。 在数据集上运行函数dist()时,R将中止。我也曾在一台Windows pc上试用过,收到的错误消息是“无法分配大小为110.5 Gb的向量” 我的Mac和Windows pc有4 GB内存 有没有办法在R中继续这样做?我知道分层算法对于大型数据集不是最好的,但是大学作业需要它 谢谢首先,非常感谢您提供一个reprex(可复制的示例)。以后一定要做 说到这个问题,您可以使用sample\u frac函数(如果我没有弄错的话

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

我的Mac和Windows pc有4 GB内存

有没有办法在R中继续这样做?我知道分层算法对于大型数据集不是最好的,但是大学作业需要它


谢谢

首先,非常感谢您提供一个reprex(可复制的示例)。以后一定要做

说到这个问题,您可以使用
sample\u frac
函数(如果我没有弄错的话,这是来自
tidyverse
软件包的函数)。例如,
sample\u frac(您的\u数据,.5)
将对数据帧的50%进行采样。它将减少要群集的数据的大小,并使您的笔记本电脑更方便


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

首先,非常感谢您提供一个reprex(可复制的示例)。以后一定要做

说到这个问题,您可以使用
sample\u frac
函数(如果我没有弄错的话,这是来自
tidyverse
软件包的函数)。例如,
sample\u frac(您的\u数据,.5)
将对数据帧的50%进行采样。它将减少要群集的数据的大小,并使您的笔记本电脑更方便


另一种方法是扩展
内存.limit(size=n)
,其中
n
是一个以兆字节为单位的数字。

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

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
}

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

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
}

dist2尝试从数据中提取一个子样本进行聚类。如果此解决方案不适用于您的目的,请扩展
memory.limit()
欢迎使用Stackoverflow:请提供一个从您的数据中提取子样本进行聚类的尝试。如果此解决方案无法满足您的需要,请扩展
memory.limit()
欢迎使用Stackoverflow:请提供一个奇妙的解决方案,但是我认为您在测试后忘记将for循环中的
m
对象更改回
X
@你好,朋友好,谢谢!更正。@RuiBarradas非常感谢您!!!但是我得到了这个错误:矩阵中的错误(r,nrow=len.r,ncol=count):无效的“ncol”值(太大或NA)另外:警告消息:在combn中(沿(X),2):矩阵中的错误(r,nrow=len.r,ncol=count):无效的“ncol”值(太大或NA)你知道我为什么会得到这个结果,以及是否有办法解决它吗?@Msms你的数据集有多少列。@RuiBarradas 17列的理想解决方案,但是我认为你在测试后忘记将for循环中的
m
对象改回
X
@你好,朋友好,谢谢!更正。@RuiBarradas非常感谢您!!!但是我得到了这个错误:矩阵中的错误(r,nrow=len.r,ncol=count):无效的“ncol”值(太大或NA)另外:警告消息:在combn中(沿(X),2):矩阵中的错误(r,nrow=len.r,ncol=count):无效的“ncol”值(太大或NA)你知道我为什么会这样吗?是否有办法解决它?@Msms你的数据集有多少列。@ruibradas 17列