绝大部分情况下,我们其实是不知道如何提问

有意思的是,如果能合理的提问,绝大部分问题其实就可以自己抽丝剥茧的解决掉

最近有一个学徒非常执着的要自费私聊提问(主要是专家咨询费),这里需要说明一下,我其实每天都会处理十几个粉丝提问,部分比较耗费时间的问题就会让大家等等,因为我也不是每天没事只做公益。除非是实在是等不及的,才需要自费紧急求助于我。

我跟学徒的沟通邮件列表如下:

image-20200513164505460

因为学徒的无效提问,最后我直接让她把代码和数据传递给我了。

错误的代码是

我看了看她错误的代码,主要是参考我表观教程来的,但是她感兴趣的物种是斑马鱼,我的教程是人类研究:

library(rtracklayer)
library(BiocManager)
library(TxDb.Drerio.UCSC.danRer10.refGene)
library(org.Dr.eg.db)
library(ChIPseeker)
narrowPeaksFile = 'wt_peaks.narrowPeak'; 
narrowPeaksFile
txdb <- TxDb.Drerio.UCSC.danRer10.refGene
library(clusterProfiler) 
peak <- readPeakFile(narrowPeaksFile) 
peak1<-import(narrowPeaksFile)
keepChr= !grepl('_',seqlevels(peak))
keepChr
seqlevels(peak, pruning.mode="coarse") <- seqlevels(peak)[keepChr]
peakAnno <- annotatePeak(peak, tssRegion=c(-3000, 3000), 
 TxDb=txdb, annoDb="org.Dr.eg.db")

她还算是知道要替换相关的R包,比如org.Dr.eg.db和TxDb.Drerio.UCSC.danRer10.refGene,其实也是咨询了我,见:

这个代码报错如下:

image-20200513164955139

这也就是她为什么反复强调,前面的运行结果也没有报错。但是不知道为什么最后一步就错了。如果没有太多R经验,的确会容易陷入报错细节里面去。

我修改后的代码

其实我一眼也看不出问题所在,因为这个R包也不是我写的,但是我跟她不一样的地方在于,我并不会认为这个错误的产生仅仅是因为最后一个代码,所以我把前面的代码,每个都仔细查看了,修改后的代码是:

rm(list = ls())
library(rtracklayer)
library(BiocManager)
library(TxDb.Drerio.UCSC.danRer10.refGene)
library(org.Dr.eg.db)
library(ChIPseeker)
narrowPeaksFile = 'wt_peaks.narrowPeak'; 
narrowPeaksFile
txdb <- TxDb.Drerio.UCSC.danRer10.refGene
txdb
head(seqlevels(txdb))
library(clusterProfiler) 
peak <- readPeakFile(narrowPeaksFile) 
peak
peak1<-import(narrowPeaksFile)
seqlevels(peak)
keepChr= !grepl('K',seqlevels(peak))
keepChr
seqlevels(peak, pruning.mode="coarse") <- seqlevels(peak)[keepChr]
seqlevels(peak)
seqlevels(peak)=paste0('chr',seqlevels(peak))
peak[1:10]
peakAnno <- annotatePeak(peak, tssRegion=c(-3000, 3000), 
 TxDb=txdb, annoDb="org.Dr.eg.db")

可以看到,代码增加了很多,主要是不停的查看一些变量情况,结果我就发现了,因为她前面走表观流程拿到的wt_peaks.narrowPeak的参考基因组里面是没有chr的,但是两个包org.Dr.eg.db和TxDb.Drerio.UCSC.danRer10.refGene是有的,所以我把那个peaks加上了chr就完美解决问题啦。

image-20200513165436703

这里面的思考过程,就是我说的控制变量法,而且需要仔细检查每一个步骤的输入输出。

其实,这里面还有一个隐患,就是参考基因组版本的问题,因为我确实不知道学徒的上游流程,所以也没办法帮她检查,但是这些peaks除了可以注释到基因,还可以细致的看一下统计情况,如果参考基因组版本有问题,图表很容易看出来的。


peakAnno <- annotatePeak(peak, tssRegion=c(-3000, 3000), 
 TxDb=txdb, annoDb="org.Dr.eg.db")

peakAnno_df <- as.data.frame(peakAnno)
peakAnno_df[1:4,1:4]

promoter <- getPromoters(TxDb=txdb, upstream=3000, downstream=3000)
tagMatrix <- getTagMatrix(peak, windows=promoter) 
# 然后查看这些peaks在所有基因的启动子附近的分布情况,热图模式
tagHeatmap(tagMatrix, xlim=c(-3000, 3000), color="red")
# 然后查看这些peaks在所有基因的启动子附近的分布情况,信号强度曲线图
plotAvgProf(tagMatrix, xlim=c(-3000, 3000), 
 xlab="Genomic Region (5'->3')", ylab = "Read Count Frequency")
plotAnnoPie(peakAnno)

比如,这个时候,拿到下面这样的图表,我就会初步认为是有问题的。

image-20200513165832258

如果你想知道为什么,可能是需要看完我的全套表观教学视频了。

Comments are closed.