1

我正在向 2 年前发布的类似帖子提出问题,但没有完整的答案(R 中 prcomp 对象的子集)。PS很抱歉评论它的答案..

基本上,我的问题是一样的。我使用 prcomp 生成了一个 PCA 表,该表具有 10000 多个基因和 1700 多个细胞,由 7 个时间点组成。将它们全部绘制在一个文件中会让人很难看清。

我想分别绘制每个时间点,使用相同的 PCA 结果表(即不重新运行 prcomp)。

感谢 Dean 给我发帖的提示。想出一种方法来描述我的数据集而不实际加载它,我相信需要一周的时间。我也试过

dput(droplevels(head(object,2))) 

选项,但信息太多了,因为我有这么大的数据集。简而言之,它是一个单细胞数据集的大型矩阵,人们通常可以在 Seurat 等软件包上看到(https://satijalab.org/seurat/pbmc3k_tutorial_1_4.html)。编辑:我在这里(在此处输入图像描述)发布了我的矩阵子集的屏幕截图。

抱歉,我不知道如何重新创建它甚至导出文本格式。但这是我可以提供的: 我的 TPM 矩阵有 16541 行(定义基因)和 1798 列(定义单元格)。

在其中,我使用以下代码根据时间点“重新标记”了我的列:

D0<-c(colnames(TPM[,grep("20180419-24837-1-*", colnames(TPM))])) #D0: 286 cells

D7<-c(colnames(TPM[,grep("20180419-24837-2-*", colnames(TPM))])) #D7: 237 cells

D10<-c(colnames(TPM[,grep("20180419-24947-5-*", colnames(TPM))])) #D10: 304 cells

......我继续标记每个时间点。

每个时间点也被赋予了特定的颜色。

rc<-rep("white", ncol(TPM))

rc<-[,grep("20180419-24837-1-*", colnames(TPM))]= "magenta"

......我继续给每个时间点上色。

我使用以下代码执行了 PCA:

pcaRes<-prcomp(t(log(TPM+1)), center= TRUE, scale. = TRUE)

然后我开始使用以下方法绘制 PCA 图:

 plot(pcaRes$x[,1], pcaRes$x[,2], xlab="PC1", ylab="PC2",
 cex=1.0, col= rc, pch=16, main="")

然后,当我想仅使用 D0 绘制 PCA 图时,使用相同的 PCA 输出(pcaRes)。这就是我卡住的地方。

PS如果其他人有更简单的方法来建议如何从我的大矩阵中输入示例数据,我欢迎任何帮助。非常感谢!对不起,我是生物信息学的新手。

4

2 回答 2

0

Stack Exchange for Bioinformatics是您需要去询问问题或了解处理您的专业领域所需的包和功能的地方。 Stack Exchange for BioinformaticsStackoverflow链接,因此您只需加入,您将拥有相同的登录名。

S3、S4 和 Base 类。

这是 R 中类的非常基本的概述。将类视为您继承其所有技能或能力的父类,因此您能够比其他人更好地完成某些任务,在某些情况下,您将无法完成任务。

在 R 和所有编程中,为了避免重新发明轮子,创建了父类,这样普通人就不必重复编写函数来做一些简单的事情,比如 plot() a graph。这个东西是隐藏的,要访问它,你从父级继承。孩子从父母那里读取特征,然后它要么执行任务,要么给你一个神秘的错误信息。

Base 和 S3 类配合得很好,它们就像 R 世界的工人阶级。S4 是针对特定研究领域的专门课程,能够提供其行业所需的特定功能。这意味着您只能将某些 Base 和 S3 函数与 Class S4 函数一起使用,大多数只是不兼容。所以这并不是你做错了什么,plot() 和 ggplot() 只是有错误的父级来处理你的数据集。

典型的基础和 S3 类数据框:盒状结构。左边是所有的列名,整齐地堆叠在一起。

典型的 Base 和 S3 类数据帧

Seurat S4 类数据框:树状结构,格式化为由特定函数读取。

在此处输入图像描述

好吧,希望对您有所帮助,并祝您在职业生涯中一切顺利。干杯康拉德

Ps 如果这有帮助,然后单击向上箭头。:)

于 2018-09-04T11:11:54.640 回答
0

感谢@ConradThiele 的建议,我会查看该网站。

我与研究所周围的其他生物信息学进行了交谈。我的查询与作为 S4 类的对象几乎没有关系,因为我在包之外执行 prcomp。我已经从对象中提取了我的矩阵,然后在它上面运行了 prcomp。

解决方案很简单:使用完整数据集运行 prcomp,将 prcomp 输出转换为数据框,输入其他列以输入其他详细信息,例如“时间点”,仅使用感兴趣的“时间点”/“变量”创建新的数据框prcomp 结果,制作多个子数据框,然后使用“绘图”或您使用的任何功能绘制这些数据框。

这不是我的解决方案,而是来自我在研究所寻求帮助的生物信息。希望这对其他人有帮助!感谢你的宝贵时间。

PS如果我有时间,我会尽快发布我建议的代码的副本。

于 2018-09-10T07:09:14.457 回答