从prcomp矩阵绘制数据子集,而无需重新运行prcomp

时间:2018-09-03 05:33:26

标签: r plot subset prcomp

我要问的是一个关于2年前发布的类似帖子的问题,但没有完整答案(subset of prcomp object in R)。附言抱歉,对它进行评论以寻求答案。

基本上,我的问题是相同的。我使用prcomp生成了一个PCA表,该表具有10000+个基因和1700+个单元,由7个时间点组成。将它们全部绘制在一个文件中很难看到。

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

感谢Dean给我有关发布的提示。我想想一种方法来描述我的数据集而不实际将其加载到这里,这将花费我一周的时间。我也尝试过

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

选项,但是因为我有这么大的数据集,所以信息太多了。简而言之,它是单细胞数据集的大矩阵,人们可以在其中通常看到诸如Seurat(https://satijalab.org/seurat/pbmc3k_tutorial_1_4.html)之类的软件包。编辑:我在这里(enter image description here)发布了矩阵的一个子集的屏幕截图。

对不起,我不知道如何重新创建此格式,甚至不导出文本格式。但这是我可以提供的: 我的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="")

然后,当我只想使用相同的PCA输出(pcaRes)使用D0绘制PCA图时。这就是我遇到的问题。

P.S。如果还有其他人可以更轻松地建议如何从我的大型矩阵中输入示例数据,我欢迎您的帮助。非常感谢!抱歉,我是生物信息学的新手。

2 个答案:

答案 0 :(得分:0)

Stack Exchange for Bioinformatics是您需要提出问题或了解与专业领域打交道的软件包和功能的地方。 Stack Exchange for Bioinformatics Stackoverflow 链接,因此您只需加入,您将具有相同的登录名。

  

S3,S4和Base类。

这是R中班级的非常基本的概观。将班级视为您从中继承其所有技能或能力的父母,因此您可以比其他班级更好地完成某些任务,在某些情况下,您不会完全能够完成任务。

在R和所有编程中,为了省去重新发明轮子的麻烦,创建了父类,这样普通人不必重复编写函数即可完成诸如plot()图之类的简单操作。这些东西是隐藏的,要访问它,您是从父级继承的。孩子从父母那里读取了特征,然后要么执行任务,要么给您一个错误的错误消息。

Base和S3类可以很好地协同工作,就像R世界的工人阶级人民一样。 S4是专门针对特定研究领域的课程,旨在提供其行业所需的特定功能。这意味着您只能将某些Base和S3函数与Class S4函数一起使用,大多数功能都不兼容。因此,您做错了什么都没错,plot()和ggplot()仅具有错误的父项才能使用您的数据集。

典型基础数据和S3类数据框:类似框的结构。左侧是所有列名称,它们整齐地排列在一起。

Typical Base and S3 Class data frame

Seurat S4类数据框:树状结构,其格式设置为可由特定功能读取。

enter image description here

希望能对您有所帮助,并祝您事业顺利。干杯康拉德

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

答案 1 :(得分:0)

感谢@ConradThiele的建议,我将检查该网站。

我与研究所周围的其他生物信息学聊天。我的查询与S4类的对象无关,因为我在程序包外部执行prcomp。我从对象中提取了矩阵,然后在其上运行了prcomp。

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

这不是我的解决方案,而是从我的生物信息学所获得的帮助。希望这对别人有帮助!感谢你的宝贵时间。

P.S。如果有时间,我将发布我建议的代码的副本。