簡體   English   中英

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

[英]dist() function in R: vector size limitation

我試圖在一些特征(基因)上繪制一些樣本(其中40個)的層次聚類,我有一個500k行和41列的大表(第一個是名稱),當我嘗試

d<-dist(as.matrix(file),method="euclidean")

我收到了這個錯誤

Error: cannot allocate vector of size 1101.1 Gb

我怎樣才能解決這個限制? 我用谷歌搜索了它並且看到了R中的ff包但我不太明白這是否可以解決我的問題。

謝謝!

一般而言,分層聚類不是處理非常大的數據集的最佳方法。

然而,在你的情況下,存在不同的問題。 如果要集群樣本結構,那么您的數據是錯誤的。 觀察結果應表示為行和基因表達(或您擁有的任何類型的數據)作為列。

讓我們假設你有這樣的數據:

data <- as.data.frame(matrix(rnorm(n=500000*40), ncol=40))

你想要做的是:

 # 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)

注意

您應該記住,當您處理高維數據時,歐幾里德距離可能會產生誤導。

處理大型數據集時,R不是最佳選擇。

R中的大多數方法似乎是通過計算全距離矩陣來實現的,該矩陣本身需要O(n^2)存儲器和運行時。 基於矩陣的實現不能很好地擴展到大數據 ,除非矩陣是稀疏的 (每個定義的距離矩陣不是)。

我不知道你是否意識到1101.1 Gb是1太字節。 我認為你沒有那么多RAM,你可能也沒有時間等待計算這個矩陣。

例如, ELKI對於群集來說功能更強大,因為您可以啟用索引結構來加速許多算法。 這樣可以節省內存(通常用於線性內存使用;用於存儲集群分配)和運行時(通常低至O(n log n) ,每個對象一次O(log n)操作)。

但當然,它也因算法而異。 例如,K-means僅需要點到平均距離,不需要(也不能使用) O(n^2)距離矩陣。

所以最后:我不認為R的內存限制是你的實際問題。 您要使用的方法無法擴展。

我只是遇到一個相關的問題,但行數較少(16列約為10萬)。
RAM大小是限制因素。
為了限制內存空間的需要,我使用了2個不同包中的2個不同的功能。 from parallelDist函數parDist()允許您非常快速地獲得距離。 它當然會在進程中使用RAM,但似乎生成的dist對象占用的內存較少(不知道為什么)。
然后我使用了hclust()函數但是從包fastcluster 對於如此大量的數據,fastcluster實際上並不是那么快,但似乎它比默認的hclust()使用更少的內存。
希望這對任何找到這個主題的人都有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM