资源:安德斯CSAMA 2015;爱,CSAMA, 2015;Huber CSAMA 2015;皮门特尔,YouTube, 2015.
单体型图样本来自一个设施,按处理日期排序。
混淆因素-记录或避免
你的工件特定的协议
轴的变异
特定于应用程序,例如,
GenomicAlignments: summarizeOverlaps ()
Rsubread: featureCount ()
DESeq2estimateSizeFactors ()
,安德斯和胡贝尔,2010
estimateDispersions ()
基因组拷贝数和mRNA表达之间的相关性在TCGA卵巢癌Affymetrix微阵列数据集中发现了38个错误标记的样本。
本实验室来源于:RNA-Seq工作流:基因水平探索性分析和差异表达,作者:Michael Love, Simon Anders, Wolfgang Huber;由马丁·摩根修改,2015年10月。
本实验室将带领您通过端到端RNA-Seq差分表达工作流程,使用DESeq2连同其他Bioconductor包。完整的工作流程从FASTQ文件开始,但我们将在读取对齐到参考基因组和读取重叠的已知基因被计数之后开始。我们将进行探索性数据分析(EDA),差异基因表达分析DESeq2,并在视觉上探索结果。
还有一些其他的Bioconductor包是重要的统计推断差异表达在基因水平,包括Rsubread,刨边机,limma,BaySeq等等。
本工作流程中使用的数据是用地塞米松(一种具有抗炎作用的合成糖皮质激素)处理气道平滑肌细胞的RNA-Seq实验。例如,糖皮质激素被用于哮喘患者,以防止或减少气道炎症。在实验中,四种原代人气道平滑肌细胞系用1微摩尔地塞米松处理18小时。对于这四种细胞系,我们分别有处理过的和未处理过的样本。实验参考资料为:
Himes BE, Jiang X, Wagner P, Hu R, Wang Q, Klanderman B, Whitaker RM, Duan Q, Lasky-Su J, Nikolos C, Jester W, Johnson M, Panettieri R Jr, Tantisira KG, Weiss ST, Lu Q.“RNA-Seq转录组分析鉴定CRISPLD2为糖皮质激素响应基因,调节气道平滑肌细胞细胞因子功能。”PLoS One. 2014年6月13日;9(6):e99625。PMID:24926665.地理:GSE52778.
作为输入,DESeq2包期望计数数据从RNA-Seq或其他高通量测序实验中获得,以整数值矩阵的形式。的值我-th行和j矩阵的-th列表示有多少reads被映射到基因我在示例j.类似地,对于其他类型的分析,矩阵的行可能对应,例如,结合区域(使用ChIP-Seq)或肽序列(使用定量质谱)。
计数值必须是序列读取的原始计数。这对于DESeq2的统计模型成立,因为只有实际计数才能正确评估测量精度。因此,请不要提供其他数量,例如(四舍五入)归一化计数,或覆盖碱基对的计数——这只会导致无意义的结果。
我们将在后面的课程中讨论如何将BAM文件中的数据汇总到一个计数表中。在这里,我们将“直接进入”,从一个准备好的开始SummarizedExperiment
.
SummarizedExperiment
我们现在用R数据()
命令加载已准备的SummarizedExperiment
这是由与上文所述的Himes等人的论文相关的公开的测序数据文件生成的。我们用于生产这个对象的步骤与您在前几节中完成的步骤相同,不同的是我们使用了所有的读取和所有的基因。有关创建此对象类型的具体步骤的详细信息装饰图案(“气道”)
进入你的R阶段。
库(气道)数据(“气道”)se <-气道
的资料SummarizedExperiment
对象可以通过访问器函数访问。例如,要查看实际数据,也就是这里的读取计数,我们使用分析()
函数。(头()
函数将输出限制在前几行。)
(试验(se))
# # # # SRR1039508 SRR1039509 SRR1039512 SRR1039513 SRR1039516 ENSG00000000003 679 448 873 408 1138 # # ENSG00000000005 0 0 0 0 0 # # ENSG00000000419 467 515 621 365 587 260 211 263 164 245 # # ENSG00000000457 60 55 40 35 78 # # # # ENSG00000000460 ENSG00000000938 0 0 2 0 1 # # SRR1039517 SRR1039520 SRR1039521 # # # # ENSG00000000005 ENSG00000000003 1047 770 572 0 0 0 # # ENSG00000000419 799 417 508 331 233 229 # # ENSG00000000457 60 # # # # ENSG00000000460 63 76 ENSG00000000938 0 0 0
在这个计数矩阵中,每一行代表一个基因组基因,每一列代表测序的RNA文库,值给出了每个文库中映射到各自基因的测序读取的原始数量。我们还拥有每个样本的元数据(计数矩阵的列)。如果已经使用其他软件进行了读取计数,则需要在这一步检查计数矩阵的列是否与列元数据的行对应。
我们可以快速检查数以百万计的与基因唯一匹配的片段。
colSums(化验(se))
## srr1039508 srr1039509 srr1039512 srr1039513 srr1039516 srr1039517 srr1039520 ## 20637971 18809481 25348649 15163415 24448408 30818215 19126151 ## srr1039521 ## 21164133
假设我们构建了aSummarizedExperiment
使用前一节中描述的方法之一,我们现在需要确保对象包含关于样本的所有必要信息,即,一个包含关于计数矩阵列的元数据的表colData
槽:
colData (se)
## 8行9列的DataFrame ## SampleName cell dex albut运行avgLength ## ## SRR1039508 GSM1275862 N61311 untrt untrt SRR1039508 126 ## SRR1039509 GSM1275863 N61311 trt untrt SRR1039509 126 ## SRR1039513 GSM1275866 N052611 untrt untrt SRR1039513 87 ## SRR1039516 GSM1275867 N052611 untrt untrt SRR1039516 120 ## srr1275871 N080611 trt untrt SRR1039517 126 ## SRR1039517SRR1039520 GSM1275874 N061011 untrt untrt SRR1039520 101 ## SRR1039521 GSM1275875 N061011 trt untrt SRR1039521生物样品## <因子> <因子> <因子> ## SRR1039508 SRX384345 SRS508568 SAMN02422675 ## SRR1039509 SRX384346 SRS508567 SAMN02422675 ## SRR1039513 SRX384349 SRS508571 SAMN02422678 ## SRR1039513 SRX384353 SRS508575 SAMN02422682 ## SRR1039517 SRX384354 SRS508576 SAMN02422673 ## SRR1039521 SRX384354 SRS508576 SRS508575 ## SRR1039521 srx1039522 SRX384353 SRS508575 SAMN02422670 ## SRR1039517 SRX384354 SRS508576 srs508557 SRS508579Samn02422683 ## srr1039521 srx384358 srs508580 samn02422677
在这里,我们看到这个对象已经包含了一个信息colData
插槽-因为我们已经为你准备了它,如描述气道装饰图案。然而,当您处理自己的数据时,您必须在此阶段为实验添加相关的样本/表型信息。我们强烈建议将此信息保存在逗号分隔值(CSV)或制表符分隔值(TSV)文件中,该文件可以从Excel电子表格导出,并将其分配给colData
槽,确保行对应于的列SummarizedExperiment
.通过使用示例表的一列指定BAM文件,我们确保了这种通信。
检查rowRanges ()
总结实验;这些是计数发生的基因组范围。
rowRanges (se)
长度为64102的GRangesList对象:## $ENSG00000000003 ## GRanges对象有17个范围和2个元数据列:## seqnames ranges strand | exon_id exon_name ## | ## [1] X [99883667,99884983] - | 667145 ENSE00001459322 ## [2] X [99885756, 99885863] - | 667146 ENSE00000868868 ## [3] X [99887482,99887565] - | 667147 ENSE00000401072 ## [4] X [99887538,99887565] - | 667148 ENSE00001849132 ## | 667149 ENSE00003554016 ## ... ... ... ... . ... ...## | 667158 ense00001886883 ## [15] x [99891605,99891803] - | 667159 ense00001855382 ## | 667160 ense00001863395 ## [17] x [99894942,99894988] - | 667161 ense00001828996 ## ##…## <64101 more elements> ## ------- ## seqinfo:来自一个未指定基因组的722个序列(1个圆形)
SummarizedExperiment
来DESeqDataSet
我们将使用DESeq2用于评估差异表达式的包。的扩展版本SummarizedExperiment
类,叫做DESeqDataSet
.很容易从一个SummarizedExperiment
来DESeqDataSet
:
library("DESeq2") dds <- DESeqDataSet(se, design = ~ cell + dex)
“设计”论证是一个公式,它表达了每个基因的计数如何依赖于变量colData
.记住,您总是可以获取方法参数的信息?
,如DESeqDataSet ?
.
这样做很方便untrt
第一层是在敏捷
因子,这样默认的log2倍的变化是按处理过的和未处理过的进行计算的(默认情况下R将选择第一个字母级别,记住:除非您告诉计算机,否则计算机不知道该做什么)。这个函数relevel ()
实现:
Dds $dex <- relevel(Dds $dex, "untrt")
此外,如果在任意点上有子集合DESeqDataSet
您应该类似地调用droplevels ()
如果细分导致某些水平有0个样本。
最后,我们准备运行差分表达式管道。准备好数据对象后,将DESeq2分析现在可以通过对函数的一次调用来运行DESeq ()
:
dds < - DESeq (dds)
##估计大小因素
# #估计分散
基因方面的散布估计
# #平均分散关系
##最终的分散估计
拟合模型和测试
这个函数将为它执行的各个步骤打印一条消息。这些在手册页中有更详细的描述DESeq ?
.简单地说,这些是:大小因素的估计(控制测序实验文库大小的差异),每个基因的色散估计,以及拟合一个广义线性模型。
一个DESeqDataSet
返回,其中包含所有拟合信息,下一节描述如何从该对象中提取感兴趣的结果表。
调用结果()
不带任何参数将提取估计的log2倍变化和p设计公式中最后一个变量的值。如果这个变量有2个以上的级别,结果()
将提取结果表,以比较最后一个级别与第一个级别。
(res < -结果(dds))
## log2 fold change (MLE): dex trt vs untrt# ENSG00000000003 708.60217 -0.38125388 0.1006560 -3.7876928 0.0001520527 ## ENSG00000000419 520.29790 0.20681271 0.1122218 1.8428925 0.0653447023 ## ENSG00000000457 237.16304 0.1434532 0.2643405 0.7915175170 ## ensg000000004460 57.93263 -0.08816322 0.2871677 -0.3070095 0.7588361136 ##…... ... ... ... ...## LRG_94 0 NA NA NA NA ## LRG_96 0 NA NA NA NA ## LRG_97 0 NA NA NA NA ## LRG_98 0 NA NA NA NA ## LRG_99 0 NA NA NA NA ## padj # <数值> ## ENSG00000000003 0.001283937 ## ENSG00000000005 NA ## ENSG00000000419 0.196568379 ## ENSG00000000457 0.911483176 ## ENSG00000000460 0.895073113 ## ... ...# lrg_94 na ## lrg_96 na ## lrg_97 na ## lrg_98 na ## lrg_99 na
作为res
是一个DataFrame
对象时,它携带关于列含义的元数据:
mcols (res use.names = TRUE)
## 6行2列的数据帧##类型描述## <字符> <字符> ## baseMean所有样本的标准化计数的中间平均值## log2FoldChange结果log2 fold change (MLE): dex trt vs untrt# lfcSE结果标准错误:dex trt vs untrt# stat结果Wald统计:dex trt vs untrt# pvalue结果Wald测试p值:dex trt vs untrt # padj结果BH调整p值
第一列,baseMean
,是所有样本归一化计数值除以大小因子的平均值。其余四列是指一种具体的对比,即比较泰爱泰党
水平在untrt
水平为因素变量敏捷
.参见帮助页结果()
(通过输入结果呢?
)查阅有关如何取得其他对比的资料。
列log2FoldChange
是效应量估计。它告诉我们,与未经处理的样本相比,由于使用地塞米松治疗,基因表达似乎发生了多大的变化。该值以2为基数的对数刻度报告:例如,1.5的log2倍变化意味着基因的表达增加了乘以的因子\(2 ^{1.5} \ \)约2.82.
当然,这个估计有一个与之相关的不确定性,在这一列中可以得到lfcSE
,为log2倍变化估计的标准误差估计。我们也可以用统计检验的结果来表示特定效应量估计的不确定性。微分表达式检验的目的是检验数据是否提供了足够的证据来得出这个值确实不同于零的结论。DESeq2执行每个基因a假设检验看是否有足够的证据来判定零假设治疗对基因没有影响,治疗和对照组之间观察到的差异仅仅是由实验的可变性引起的(也就是说,你可以预期在同一治疗组的不同样本之间的可变性类型)。和通常的统计一样,这个测试的结果被报告为p值,并在列中找到它pvalue
.(记住,pValue表示在零假设所描述的情况下,看到与观测到的一样强,甚至更强的折叠变化的概率。)
我们还可以用下面的代码行总结结果,它报告了一些额外的信息。
总结(res)
## ##在33469中有非零的总读计数##调整p值< 0.1 ## LFC > 0(上):2604,7.8% ## LFC < 0(下):2212,6.6% ##异常值[1]:0,0% ##低计数[2]:15441,46% ##(平均计数< 5)## [1]see 'cooksCutoff'参数的结果## [2]see 'independentFiltering'参数的结果
注意,由于FDR水平为10%的地塞米松治疗,有许多基因表达差异。这是有道理的,因为已知气道的平滑肌细胞会对糖皮质激素产生反应。然而,有两种方法可以更严格地判断哪些基因是重要的:
padj
在结果表中)lfcThreshold
的观点结果()
.看到DESeq2这篇文章展示了这个论证的用法。有时是一个子集p值res
将NA
(“不可用”)。这是DESeq ()
fda报告该基因的计数为零的方式,因此没有进行检测。此外,p可以分配值NA
如果基因被排除在分析之外,因为它包含一个极端的计数异常值。有关更多信息,请参见小插图的离群值检测部分。
高通量生物学的新手通常认为阈值p较低的值,如在其他设置中经常使用的0.05,将是合适的,但事实并非如此。我们简要解释原因:
有5676个基因p值在33469个基因中小于0.05,检测成功报告ap值:
sum(res$pvalue < 0.05, na.rm=TRUE)
# # 5676年[1]
总和(! is.na (res pvalue美元))
# # 33469年[1]
现在,假设零假设对所有基因都成立,也就是说,没有基因受到地塞米松治疗的影响。然后,根据的定义p价值,我们预计有5%的基因有p值低于0.05。这相当于1673个基因。如果我们只考虑a的基因列表p值低于0.05作为差异表达,因此该列表应该包含高达1673 / 5676 = 29%的假阳性。
DESeq2使用Benjamini-Hochberg (BH)平差,如基准R所述p.adjust函数;简单地说,这种方法计算每个基因的调整p值,回答了以下问题:如果一个称为显著的所有基因带有p值小于或等于该基因的p值阈值,假阳性的百分比是多少错误发现率(在上述计算的意义上)?这些值称为bh调整值p值,在列中给出padj
的res
对象。
因此,如果我们认为10%的假阳性是可以接受的,我们就可以认为所有的基因都有一个调整p下面的值= 0.1 \ \ (10%)是重要的。有多少这样的基因?
sum(res$padj < 0.1, na.rm=TRUE)
# # 4816年[1]
我们将结果表子集到这些基因,然后按log2倍变化估计排序,得到下调最强的显著基因。
resSig <-子集(res, padj < 0.1) head(resSig[order(resSig$log2FoldChange),])
## log2 fold change (MLE): dex trt vs untrt## baseMean log2FoldChange lfcSE stat pvalue ## <数值> <数值> <数值> <数值> <数值> ## ENSG00000128285 6.624741 -5.325912 1.2578863 -4.234017 2.295537e-05 ## ENSG00000267339 26.233553 0.6731316 -6.850894 7.338997e-12 ## ENSG00000019186 14.087605 -4.325920 0.8578247 -5.042895 4.58539e -07 ## ENSG00000183454 5.804171 - 4.2625920 1.1669498 -3.654045 2.581412e-04 ## ENSG00000146006 46.807597 -4.211875 0.5288797 -7.9637671.668799e-15 ## ENSG00000141469 53.436528 -4.124784 1.1297977 -3.650905 2.613174e-04 ## padj ## <数值> ## ENSG00000128285 2.382495e-04 ## ENSG00000267339 2.057658e-10 ## ENSG00000019186 6.623843e-06 ## ENSG00000183454 2.051926e-03 ## ENSG00000141469 2.073517e-03
而且上调幅度最大。的订单()
函数给出的指标是递增的,所以求减序的一个简单方法就是加a-
的迹象。或者,也可以使用实参减少= TRUE
.
head(resSig[order(-resSig$log2FoldChange),])
## log2 fold change (MLE): dex trt vs untrt## baseMean log2FoldChange lfcSE stat pvalue ## <数值> <数值> <数值> <数值> <数值> ## ENSG00000179593 67.243048 9.505972 1.0545111 9.014578 1.976299e-19 ## ENSG00000109906 385.071029 7.352628 0.5363902 13.707610 9.141988e-43 ## ENSG00000250978 56.318194 6.327393 0.6778153 9.334981 1.010098e-20 ## ENSG00000132518 5.654654 5.885113 1.3241367 4.444491 8.810031e-06 ## ENSG00000127954 286.384119 0.4930828 10.5604194.546302e-26 ## ENSG00000249364 8.839061 5.098168 1.1596852 4.396166 1.101798e-05 ## padj ## <数值> ## ENSG00000179593 1.254532e-17 ## ENSG00000109906 2.257695e-40 ## ENSG00000109906 2.257695e-40 ## ENSG00000132518 1.002065e-04 ## ENSG00000127954 5.059304e-24 ## ENSG00000249364 1.226124e-04
一种可视化特定基因计数的快速方法是使用plotCounts ()
函数,该函数以DESeqDataSet
、一个基因名称,以及要绘制计数图的群体。
topGene <- rownames(res)[it .min(res$padj)] data <- plotCounts(dds, gene=topGene, intgroup=c("dex"), returnData=TRUE)
我们还可以使用ggplot ()
函数的ggplot2包:
库(ggplot2) ggplot(data, aes(x=dex, y=count, fill=dex)) + scale_y_log10() + geom_dotplot(binaxis="y", stackdir="center")
使用' bins = 30 '的stat_bindot()。使用' binwidth '选择更好的值。
“MA-plot”为两组比较实验提供了有用的概述。在y轴上绘制了特定比较的log2倍变化,x轴上显示了按大小因子归一化的计数的平均值(“M”表示负,因为对数比等于log - log,“a”表示平均值)。
plotMA (res ylim = c (5,5))
每个基因都用一个点表示。带有调节的基因\ (p \)低于阈值(这里是默认值0.1)的值用红色表示。的DESeq2包包含log2倍的先验变化,导致低计数和高可变计数基因的调节log2倍变化,这可以从图左侧点的扩散缩小中看到。这幅图表明,只有平均归一化计数大的基因包含足够的信息来产生一个重要的呼叫。
我们也可以在MA图上标记单个点。这里我们使用与()
函数为结果对象的选定行绘制圆和文本。在与()
函数,只有baseMean
而且log2FoldChange
的选定行的res
使用。
plotMA(res, ylim=c(-5,5)) with(res[topGene,], {points(baseMean, log2FoldChange, col="dodgerblue", cex=2, lwd=2) text(baseMean, log2FoldChange, topGene, pos=2, col="dodgerblue")})
一个基因是否被称为显著基因不仅取决于它的LFC,还取决于它在组内的变异性DESeq2量化的分散.对于强表达基因,离散度可以理解为变异系数的平方:离散度值为0.01意味着基因的表达倾向于典型的差异\ \√{0.01}= 10 \ % \)在同一处理组的样本之间。对于弱基因,泊松噪声是另一种噪声源。
这个函数plotDispEsts ()
可视化DESeq2的分散估计:
plotDispEsts (dds)
黑点是每个基因的离散度估计值,是分别考虑每个基因的信息得到的。除非有很多样本,否则这些值会在其真实值附近剧烈波动。因此,我们拟合红色趋势线,它显示了离散度对均值的依赖性,然后将每个基因的估计值缩小到红线,得到最终的估计值(蓝点),然后用于假设检验。在主要“云”点上方的蓝色圆圈是具有高基因分散估计的基因,标记为分散离群值。因此,这些估计值没有向拟合的趋势线缩小。
的直方图是另一个有用的诊断图p值。
Hist (res$pvalue, breaks=20, col="grey50", border="white")
如果排除了计数非常少的基因,这个图就变得更流畅了:
hist(res$pvalue[res$baseMean > 1], breaks=20, col="grey50", border="white")
MA图突出了RNA-Seq数据的一个重要特性。对于弱表达的基因,我们没有机会看到差异表达,因为低读计数受到高泊松噪声的影响,任何生物效应都淹没在读计数的不确定性中。我们也可以通过检查小的比率来证明这一点p按平均归一化计数归类的基因的值(例如,小于0.01):
#使用分位数函数qs <- c(0, quantile(res$baseMean[res$baseMean > 0], 0:7/7)) #将基因切到垃圾箱垃圾箱<- cut(res$baseMean, qs) #使用中间点的水平(垃圾箱)<- paste0("~",round(.)5*qs[-1] + .5*qs[-length(qs)])) #计算每个bin比值小于0.01的$p$值的比值(tapply(res$pvalue, bins, function(p) mean(p < .01, na.rm=TRUE)) #绘制这些比值barplot(比值,xlab="平均归一化计数",ylab="小p值的比值")
乍一看,过滤掉这些基因似乎没什么好处。毕竟,测试发现它们并不重要。然而,这些基因对多重测试调整有影响,如果去除这些基因,多重测试调整的性能会提高。通过从FDR程序的输入中删除弱表达基因,我们可以在保留的基因中发现更多的显著基因,从而提高了我们测试的能力。这种方法被称为独立的过滤.
这个词独立的强调一个重要的警告。只有当过滤准则独立于实际测试统计量时,才允许这样的过滤。否则,滤波将使测试无效,从而使BH过程的假设无效。这就是为什么我们过滤了平均值所有样本:该过滤器对分配给处理组和对照组的样本是盲目的,因此是独立的。内部采用独立过滤软件DESeq2来自于genefilter软件包,其中包含对描述独立过滤的统计基础的论文的引用。
我们的结果表只使用了ensemble基因id,但基因名称可能更有信息。Bioconductor的注释包有助于将各种ID方案相互映射。
我们加载AnnotationDbi包和注释包org.Hs.eg.db:
库(org.Hs.eg.db)
这是用于的有机体注释包(“org”)智人(“Hs”),组织成AnnotationDbi数据库包(" db "),使用Entrez基因id (" eg ")作为主键。要获取所有可用键类型的列表,使用:
列(org.Hs.eg.db)
#[1]“accnum”“alias”“ensembl”“ensemblprot”##[5]“ensembltrans”“entrezid”“enzyme”“evidence”##[9]“evidenceall”“genename”“go”“goall”##[13]“ipi”“map”“omim”“ontology”##[17]“ontologyall”“path”“pfam”“pmid”##[21]“prosite”“refseq”“symbol”“ucsckg”##[25]“unigene”“uniprot”
res$hgnc_symbol <- unname(mapIds(org. hs . e.g. .db, rownames(res), "SYMBOL", " synbl ")))
'select()'返回1:多个键和列之间的映射
res$entrezgene <- unname(mapIds(org. hs . e.g. .db, rownames(res), "ENTREZID", "ENSEMBL"))
'select()'返回1:多个键和列之间的映射
现在的结果有了所需的外部基因id:
resOrdered <- res[order(res$pvalue),] head(resOrdered)
## log2 fold change (MLE): dex trt vs untrt## baseMean log2FoldChange lfcSE stat pvalue ## <数值> <数值> <数值> <数值> <数值> ## ENSG00000152583 997.4398 4.1840564 24.85607 2.223017e-136 ## ENSG00000165995 495.0929 3.291062 0.1331768 24.71198 7.951622e-135 ## ENSG00000120129 3409.0294 2.947810 0.1214350 24.27480 3.619142e-130 ## ENSG00000101347 12703.3871 3.766996 0.1554336 24.23541 9.423844e-130 ## ENSG00000189221 2341.7673 0.1417802 23.653371.089779e-123 ## ENSG00000211445 12285.6151 3.730403 0.1658267 22.49579 4.563626e-112 # padj hgnc_symbol entrezgene ## <数字> <字符> <字符> ## ENSG00000152583 4.007654e-132 SPARCL1 8404 ## ENSG00000165995 7.167592e-131 CACNB2 783 ## ENSG00000120129 2.174863e-126 DUSP1 1843 ## ENSG00000101347 4.247326e-126 SAMHD1 25939 ## ENSG00000189221 3.929307e-120 MAOA 4128 ## ENSG00000211445 1.371217e-108 GPX3 2878
您可以轻松地将结果表保存到CSV文件中,然后可以使用Excel等电子表格程序加载该文件。调用as.data.frame是否需要转换DataFrame对象IRanges包)data.frame可以处理的对象write.csv.
write.csv (as.data.frame (resOrdered),文件=“results.csv”)
作为本文档的最后一部分,我们将调用该函数sessionInfo,它报告R的版本号和此会话中使用的所有包。保持这样的记录是一种很好的做法,因为它将有助于跟踪发生了什么,以防R脚本因为包的新版本中的函数发生了更改而停止工作。会话信息也应该如此总是包括在任何电子邮件给Bioconductor支持网站以及分析中使用的所有代码。
sessionInfo ()
## R版本3.4.1 Patched (2017-09-07 r73217) ##平台:x86_64-pc-linux-gnu(64位)##运行在:Ubuntu 16.04.3 LTS ## ##矩阵产品:default ## BLAS: /home/ mmorgan /bin/R-3-4-branch/lib/libRblas. #因此## LAPACK: /home/ mmorgan /bin/ r -3-4-branch/lib/libRlapack。因此## ## locale: ## [1] LC_CTYPE=en_US。UTF-8 LC_NUMERIC= c# # [3] LC_TIME=en_US。utf - 8 LC_COLLATE = en_US。UTF-8 ## [5] LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。UTF-8 ## [7] LC_PAPER=en_US。UTF-8 LC_NAME= c# [9] LC_ADDRESS=C LC_TELEPHONE= c# [11] LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION=C ## ##附加的基本包:## [1]parallel stats4 stats graphics grDevices utils datasets ## [8] methods base ## ##其他附加的包:# # # # [1] airway_0.111.0 org.Hs.eg.db_3.4.1 [3] AnnotationDbi_1.39.2 RColorBrewer_1.1-2 # # [5] ggplot2_2.2.1.9000 gplots_3.0.1 # # [7] DESeq2_1.17.15 SummarizedExperiment_1.7.5 # # [9] DelayedArray_0.3.19 matrixStats_0.52.2 # # [11] Biobase_2.37.2 GenomicRanges_1.29.12 # # [13] GenomeInfoDb_1.13.4 IRanges_2.11.14 # # [15] S4Vectors_0.15.6 BiocGenerics_0.23.0 # # [17] BiocStyle_2.5.20 # # # #通过加载一个名称空间(而不是附加):## [4] Formula_1.2-2 - latticeExtra_0.6-28 blob_1.1.0 ## [7] GenomeInfoDbData_0.99.1 yaml_2.1.14 RSQLite_2.0 ## [10] backports_1.1.0 lattice_0.20-35 digest_0.6.12 ## [13] XVector_0.17.1 checkmate_1.8.3 colorspace_1.3-2 ## [16] htmltools_0.3.6 Matrix_1.2-11 plyr_1.8.4 ## [19] pkgconfig_2.0.1 XML_3.98-1.9 genefilter_1.59.0 ## [25] scales_0.5.0 gdata_2.18.0 BiocParallel_1.11.7 ## [28] htmlTable_1.9 ## [7] GenomeInfoDbData_0.99.1tibble_1.3.4 annotate_1.55.0 # # [31] nnet_7.3-12 lazyeval_0.2.0 survival_2.41-3 # # [34] magrittr_1.5 memoise_1.1.0 evaluate_0.10.1 # # [37] foreign_0.8 - 69 tools_3.4.1 data.table_1.10.4 # # [40] stringr_1.2.0 munsell_0.4.3 locfit_1.5 - 9.1 # # [43] cluster_2.0.6 compiler_3.4.1 caTools_1.17.1 # # [46] rlang_0.1.2 grid_3.4.1 rcurl_1.95 - 4.8 # # [49] htmlwidgets_0.9 bitops_1.0-6 base64enc_0.1-3 # # [52] rmarkdown_1.6 codetools_0.2-15 gtable_0.2.0 # # [55] DBI_0.7 gridExtra_2.2.1 knitr_1.17 # # [58] bit_1.1-12Hmisc_4.0-3 rprojroot_1.2 ## [61] KernSmooth_2.23-15 stringi_1.1.5 Rcpp_0.12.12 ## [64] geneplotter_1.55.0 rpart_1 .1-11 acepack_1.4.1