R中的dist()函数:向量大小限制

ola*_*ala 5 r cluster-analysis

我试图在某些特征(基因)上绘制一些样本(其中的40个)的分层聚类,并且我有一个大表,该表具有50万行和41列(第一个是名称),当我尝试

d<-dist(as.matrix(file),method="euclidean")
Run Code Online (Sandbox Code Playgroud)

我得到这个错误

Error: cannot allocate vector of size 1101.1 Gb
Run Code Online (Sandbox Code Playgroud)

我如何解决这个限制?我用谷歌搜索并遇到了R中的ff包,但是我不太明白这是否可以解决我的问题。

谢谢!

zer*_*323 5

一般来说,层次聚类并不是处理非常大的数据集的最佳方法。

然而,就您而言,存在不同的问题。如果你想对样本进行聚类,那么你的数据结构是错误的。观察结果应表示为行,基因表达(或任何类型的数据)表示为列。

假设您有这样的数据:

data <- as.data.frame(matrix(rnorm(n=500000*40), ncol=40))
Run Code Online (Sandbox Code Playgroud)

你想做的是:

 # Create transposed data matrix
 data.matrix.t <- t(as.matrix(data))

 # Create distance matrix
 dists <- dist(data.matrix.t)

 # Clustering
 hcl <- hclust(dists)

 # Plot
 plot(hcl)
Run Code Online (Sandbox Code Playgroud)

笔记

您应该记住,当您处理高维数据时,欧几里德距离可能会产生相当大的误导。