使用 R 基于欧几里得距离和完整的链接度量进行聚类,向量太多?

Using R to cluster based on euclidean distance and a complete linkage metric, too many vectors?

我想弄清楚如何将计数矩阵读入 R,然后根据欧氏距离和完整的链接度量进行聚类。原始矩阵有 56,000 行(基因)和 7 列(处理)。我想看看治疗之间是否存在聚类关系。但是,每次我尝试这样做时,我首先会收到一条错误消息,指出 Error: cannot allocate vector of size 544.4 Gb 由于我正在尝试复制其他人发布的作品,所以我想知道我的初始设置是否有误数据输入。

其次,如果我尝试使用 56,000 个基因中的 20 个基因进行聚类,我可以制作聚类树状图,但分支不是实验样本。我正在尝试复制的论文使用显示聚类样本的结果树状图进行了此类聚类。

这是我正在尝试的代码 运行:

exprs <- as.matrix(read.table("small_RMA_table.txt", header=TRUE, sep = "\t", row.names = 1, as.is=TRUE))
eucl_dist=dist(matrix(exprs),method = 'euclidean')
hie_clust=hclust(eucl_dist,method = 'complete')
plot(hie_clust)

这是我的数据样本 table:

    AGS KATOIII MKN45   N87 SNU1    SNU5    SNU16
1_DDR1  11.18467721 11.91358171 11.81568242 11.08565284 8.054326631 12.46899188 10.54972491
2_RFC2  9.19869822  9.609015734 8.925772678 8.3641799   8.550993726 10.32160527 9.421779056
3_HSPA6 6.455324139 6.088320986 7.949175048 6.128573129 6.113793411 6.317460116 7.726657567
4_PAX8  8.511225092 8.719103196 8.706242048 8.705618546 8.696547633 9.292782564 8.710369119
5_GUCA1A    3.773404228 3.797729793 3.574286779 3.848753216 3.684193193 3.66065606  3.88239872
6_UBA7  6.477543321 6.631538303 6.506133756 6.433793116 6.145507918 6.92197071  6.479113995
7_THRA  6.263090367 6.507397854 6.896879084 6.696356125 6.243160864 6.936051147 6.444444498
8_PTPN21    6.88050894  6.342007735 6.55408163  6.099950167 5.836763044 5.904301086 6.097067306
9_CCL5  6.197989448 4.00619542  4.445053893 7.350765625 3.892650264 7.140038596 4.123639647
10_CYP2E1   4.379433632 4.867741561 4.719912827 4.547433566 6.530890968 4.187701905 4.453267508
11_EPHB3    6.655231606 7.984278173 7.025962652 7.111129175 6.246989328 6.169529157 6.546374446
12_ESRRA    8.675023046 9.270153715 8.948209029 9.412638347 9.4470612   9.98312055  9.534236722
13_CYP2A6   6.834018146 7.18386746  6.826740822 7.244411918 6.744588768 6.715122111 7.302922762
14_SCARB1   8.856802264 8.962211232 8.975200168 9.710291176 9.120002571 10.29588004 10.55749325
15_TTLL12   8.659539601 9.93935462  8.309244963 9.21145716  9.792647852 10.46958091 10.51879844
16_LINC00152    5.108632654 4.906321384 4.958158343 5.315532543 5.456138001 5.242577092 5.180295902
17_WFDC2    5.595843025 5.590991341 5.776102664 5.622086284 5.273603946 5.304240608 5.573746302
18_MAPK1    6.970036434 5.739881305 4.927993642 5.807358161 7.368137365 6.17697538  5.985006279
19_MAPK1    8.333269232 8.758733916 7.855324572 9.03596893  7.808283302 7.675434022 7.450262521
20_ADAM32   4.075355477 4.216259982 4.653654879 4.250333684 4.648194266 4.250333684 4.114286071

行描述基因(Ex.,1_DDR1,2_RFC2,等),列是实验样本(Ex.AGS,KATOIII)。我希望看到集群中样本的相关性。

这是我的代码生成的示例树状图。我以为它只会显示 7 个分支反映我的 7 个样本:

论文的树状图(包括这 8 个样本以及更多样本)如下:

感谢您提供的任何帮助!

您 运行 内存不足。而已。您不能分配超出内存的向量 space。移动到具有更多内存的计算机,或者尝试使用 bigmemory(我从未尝试过)。

https://support.bioconductor.org/p/53848/

如果有人想知道,我的第二个问题的答案如下。我在矩阵上调用 as.matrix,它搞砸了数据。以下代码现在可以使用了!

exprs <- as.matrix(read.table("small_RMA_table.txt", header=TRUE, sep = "\t", row.names = 1, as.is=TRUE))
eucl_dist=dist(exprs,method = 'euclidean')
hie_clust=hclust(eucl_dist,method = 'complete')
plot(hie_clust)

您要在 上聚类(检测处理之间的相似性)还是在 上聚类(检测基因之间的相似性)?听起来您想要前者,因为您期望 7 次治疗有 7 个树状图分支。

如果是这样,那么您需要转置您的数据集。 dist 为行而不是列计算距离矩阵,这不是您想要的。

完成转置后,您的聚类应该不会花费任何时间,而且内存最少。