R在使用函数DIST(110 GB向量)时中止
我需要在一个包含173000行和17列的数据集上运行R中的分层聚类算法。 在数据集上运行函数dist()时,R将中止。我也曾在一台Windows pc上试用过,收到的错误消息是“无法分配大小为110.5 Gb的向量” 我的Mac和Windows pc有4 GB内存 有没有办法在R中继续这样做?我知道分层算法对于大型数据集不是最好的,但是大学作业需要它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函数(如果我没有弄错的话
谢谢首先,非常感谢您提供一个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列