1. 从一堆陌生基因到功能地图:COG注释到底在解决什么问题
做过基因组或转录组项目的人大概都有这种体验:测序公司交付的Excel表格里躺着几千上万个基因ID,后面跟着一堆看不出规律的编号,你盯着屏幕半天,脑子里只有一个问题——这些基因到底在干什么?它们之间有没有功能上的关联?如果老板或者审稿人问一句"这批基因主要参与哪些生物学过程",你总不能把基因ID列表甩过去。
COG注释分析就是用来回答这个问题的。COG全称是Clusters of Orthologous Groups,翻译过来叫"直系同源基因簇"。它的核心思路很朴素:把来自不同物种的蛋白质序列放在一起比对,如果一组蛋白在不同物种中都能找到,而且序列相似度足够高,就认为它们来自同一个祖先基因,归为一个COG簇。每个COG簇会被赋予一个功能分类,比如"能量产生与转换""氨基酸转运与代谢""翻译后修饰"等等。这样一来,你手里那堆冷冰冰的基因ID,就能被映射到二十多个功能大类上,形成一张能看懂的功能分布图。
我第一次接触COG是在一个细菌基因组项目里。当时做完基因预测,拿到三千多个ORF,完全不知道从哪下手。后来用COG做了一遍注释,发现将近四成的基因集中在"一般功能预测"和"功能未知"这两个类别里,剩下的才分散在代谢、转录、翻译等具体功能上。这个结果本身就是一个重要信息——说明这个菌株的基因组里有大量功能尚未被实验验证的基因,后续研究可以优先关注那些有明确功能归属的类别。
COG分析适合谁用?如果你做的是微生物基因组、环境宏基因组、或者比较基因组学,COG几乎是绕不开的一步。它不需要你有很深的编程基础,但需要你理解几个关键概念:直系同源、功能分类、注释覆盖率。这篇文章会从实际操作的角度,把COG注释分析的完整流程、图解方法、常见坑点讲清楚,让你拿到基因列表之后能独立跑出一张像样的功能分类图。
2. COG注释的底层逻辑:为什么是这二十几个类别
2.1 直系同源与旁系同源:一字之差,结果天壤之别
COG分析的基础是"直系同源"这个概念。直系同源指的是不同物种中由同一个祖先基因垂直遗传下来的基因,它们通常保留相同的功能。旁系同源则是同一物种内由于基因复制产生的基因,功能可能已经分化。COG只关注直系同源,因为只有直系同源才能可靠地传递功能信息。
为什么这个区分重要?假设你拿一个基因去数据库里比对,如果匹配到的是旁系同源基因,那它的功能可能和参考基因完全不同。早期有些注释工具不区分这两种情况,导致功能注释出现偏差。现在主流的COG分析流程,比如使用eggNOG-mapper或者NCBI的COG数据库,都会在比对阶段做严格的直系同源判定,通常要求双向最优匹配或者使用系统发育树来确认。
实际操作中,你不需要自己去算直系同源,但需要知道这个原理,因为它解释了为什么COG注释的覆盖率通常不会达到100%。有些基因在数据库里找不到可靠的直系同源匹配,就会被归为"未注释"或"仅一般功能预测"。这不是分析失败,而是生物学事实——很多基因确实是物种特有的,或者进化速度太快,已经丢失了可识别的同源信号。
2.2 二十五个功能类别的划分依据
COG数据库把功能分为四大类,细分为二十五个小类。这四大类分别是:信息存储与处理、细胞过程与信号、代谢、以及特征不明。每个小类用一个单字母代码表示,比如J代表翻译,K代表转录,E代表氨基酸转运与代谢,G代表碳水化合物转运与代谢。
这套分类体系不是随便定的,它反映了细胞功能的层级结构。信息存储与处理类(J、K、L、A、B)对应的是遗传信息的维持和表达;细胞过程与信号类(D、O、M、N、T、U、V、W、Y、Z)对应的是细胞周期、防御、运动、信号传导等;代谢类(C、E、F、G、H、I、P、Q)对应的是各种物质的合成与分解;特征不明类(R、S)则是那些功能未知或只有一般预测的基因。
理解这个分类框架的好处是,当你看到结果图时,能快速判断样本的功能偏向。比如一个环境样本的COG分布如果大量集中在E和G,说明这个群落的代谢活性很强;如果集中在J和K,可能意味着有活跃的转录翻译活动。这种判断不需要你做复杂的统计,看图就能有个大致方向。
2.3 COG与KEGG、GO的关系:别把它们混为一谈
很多人会把COG和KEGG、GO注释搞混,觉得都是功能注释,随便选一个就行。实际上这三者的定位完全不同。COG是进化分类,强调的是基因的直系同源关系和功能大类归属;KEGG是通路数据库,强调的是基因在代谢通路中的位置;GO是本体论,强调的是基因功能的标准化描述,包括分子功能、生物学过程、细胞组分三个维度。
举个例子,一个参与糖酵解的酶,在COG里可能被归为G(碳水化合物转运与代谢),在KEGG里会出现在糖酵解通路图上,在GO里会同时有"ATP结合"(分子功能)、"糖酵解过程"(生物学过程)、"细胞质"(细胞组分)三个注释。三者互补,不是替代关系。
做COG分析的时候,我通常建议同时保留KEGG和GO的结果,因为COG给你的是宏观功能分布,KEGG给你的是通路层面的细节,GO给你的是功能描述的标准化术语。如果只做COG,你可能会漏掉一些重要的通路信息;如果只做KEGG,你又看不到整体的功能大类分布。三者结合,才能对基因集有一个完整的认识。
3. 从原始序列到功能分类图:完整操作链路拆解
3.1 输入数据的准备与格式要求
COG分析的输入通常是蛋白质序列文件,格式为FASTA。如果你手里只有核酸序列,需要先用Prodigal或者GeneMark做基因预测,把核酸序列翻译成蛋白序列。Prodigal是我用得比较多的工具,它对细菌和古菌的基因预测准确率很高,命令也很简单:
prodigal -i genome.fasta -a proteins.faa -d genes.fna -o prodigal.out -p meta这里的-p meta参数适用于宏基因组数据,如果是单菌基因组,可以去掉这个参数。输出的proteins.faa就是后续COG分析的输入文件。
拿到蛋白序列后,建议先做一步去冗余。如果序列里有大量完全相同的蛋白,会拖慢比对速度,而且对结果没有额外贡献。可以用CD-HIT做聚类:
cd-hit -i proteins.faa -o proteins_nr.faa -c 0.95 -n 5-c 0.95表示相似度阈值设为95%,-n 5是词长参数。这样能把高度相似的序列合并,减少计算量。注意,去冗余之后要记录每个代表序列对应的原始序列数量,后面做丰度统计的时候需要用到。
3.2 比对工具的选择:本地化方案与在线方案的取舍
COG注释的核心步骤是把你的蛋白序列和COG数据库做比对。这里有两个主流方案:一是使用eggNOG-mapper,二是使用NCBI的COG数据库配合RPS-BLAST。
eggNOG-mapper是目前最方便的方案,它整合了eggNOG数据库(COG的扩展版),支持在线和本地两种运行模式。在线版适合序列数量少的情况,直接上传FASTA文件,等几分钟就能下载结果。本地版需要下载几十GB的数据库文件,但适合大批量数据处理,而且可以重复运行不用排队。
emapper.py -i proteins_nr.faa --output cog_result --cpu 8 -m diamond这个命令用diamond作为比对引擎,比传统的BLAST快很多。--cpu 8指定使用8个线程,根据你的机器配置调整。输出结果里会包含每个蛋白的COG编号、功能类别、以及注释描述。
如果坚持用NCBI的COG数据库,流程会麻烦一些。需要先下载COG数据库的蛋白序列和位置信息文件,然后用RPS-BLAST做比对:
rpsblast -query proteins_nr.faa -db Cog -out cog_blast.out -evalue 0.001 -outfmt 6-evalue 0.001是常用的显著性阈值,-outfmt 6输出制表符分隔的格式,方便后续解析。RPS-BLAST的优势是它基于保守结构域做比对,对远缘同源基因的检测更敏感,但速度比diamond慢不少。
我的建议是:如果只是做常规的COG分布图,用eggNOG-mapper就够了,速度快、结果规范、功能类别直接给出来。如果需要做更精细的进化分析,或者要检测那些序列相似度很低但结构域保守的基因,再考虑RPS-BLAST。
3.3 结果解析:从比对输出到功能分类统计表
比对完成后,你会得到一个包含大量信息的表格。以eggNOG-mapper的输出为例,关键列包括query(你的蛋白ID)、COG(匹配到的COG编号)、category(功能类别字母)、description(功能描述)。你需要做的是按category列统计每个类别的基因数量。
这里有一个容易忽略的细节:一个蛋白可能匹配到多个COG,或者一个COG可能对应多个功能类别。处理这种情况时,通常取最优匹配(e-value最小的那个),或者按主要功能类别归类。如果不想自己写脚本,可以用eggNOG-mapper自带的create_dbs和emapper_annotations工具生成统计表。
统计完成后,你会得到类似这样的表格:
| 功能类别 | 类别代码 | 基因数量 | 占比 |
|---|---|---|---|
| 翻译,核糖体结构与生物发生 | J | 156 | 8.2% |
| 转录 | K | 203 | 10.7% |
| 氨基酸转运与代谢 | E | 187 | 9.8% |
| 碳水化合物转运与代谢 | G | 142 | 7.5% |
| 一般功能预测 | R | 312 | 16.4% |
| 功能未知 | S | 289 | 15.2% |
这张表就是后续画图的基础数据。注意"一般功能预测"和"功能未知"这两个类别,它们的占比高低能反映基因组的研究成熟度。占比高说明有很多基因的功能还没有实验验证,这在非模式生物里很常见。
3.4 可视化:用R或Python画出可发表级别的COG分布图
拿到统计表之后,下一步是画图。COG分布图最常见的形式是柱状图,横轴是功能类别,纵轴是基因数量或占比。如果要做多个样本的比较,可以用堆叠柱状图或者分组柱状图。
用R的ggplot2画单样本COG图,核心代码如下:
library(ggplot2) cog_data <- read.csv("cog_stats.csv") cog_data$category <- factor(cog_data$category, levels = cog_data$category[order(cog_data$count, decreasing = TRUE)]) ggplot(cog_data, aes(x = category, y = count, fill = group)) + geom_bar(stat = "identity", width = 0.7) + scale_fill_manual(values = c("#4E79A7", "#F28E2B", "#E15759", "#76B7B2")) + labs(x = "COG功能类别", y = "基因数量", fill = "功能大类") + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 10))这段代码的关键是factor那一步,它让横轴的类别按基因数量从高到低排列,而不是按字母顺序。这样图看起来更有逻辑,读者一眼就能看出哪些功能类别占主导。
如果要做多样本比较,比如处理组和对照组,可以用堆叠柱状图:
ggplot(cog_data, aes(x = category, y = count, fill = sample)) + geom_bar(stat = "identity", position = "dodge", width = 0.7) + labs(x = "COG功能类别", y = "基因数量", fill = "样本") + theme_minimal()position = "dodge"让不同样本的柱子并排显示,方便对比。如果样本多,也可以改成position = "stack"做堆叠。
用Python的matplotlib或seaborn也能画,逻辑类似。seaborn的barplot函数默认就会做统计聚合,代码更简洁:
import seaborn as sns import matplotlib.pyplot as plt cog_data = sns.load_dataset("cog_stats") sns.barplot(data=cog_data, x="category", y="count", hue="sample") plt.xticks(rotation=45, ha="right") plt.tight_layout() plt.savefig("cog_distribution.pdf", dpi=300)保存为PDF格式是为了后续在AI或Inkscape里微调,矢量图放大不会失真,适合投稿用。
4. 图解背后的门道:怎么让COG图讲出生物学故事
4.1 颜色搭配与类别排序:别让读者猜你的图在说什么
我见过很多COG图,横轴类别按字母顺序排,颜色随机分配,读者看完根本抓不住重点。好的COG图应该做到两点:类别按功能大类分组,颜色按功能大类区分。
具体来说,可以把二十五个类别先按四大类分组:信息存储与处理(J、K、L、A、B)、细胞过程与信号(D、O、M、N、T、U、V、W、Y、Z)、代谢(C、E、F、G、H、I、P、Q)、特征不明(R、S)。然后在图上用不同的色系表示这四大类,比如蓝色系给信息存储,橙色系给代谢,灰色系给特征不明。这样读者一眼就能看出样本的功能偏向。
类别排序也有讲究。如果按基因数量降序排,能突出主要功能类别;如果按功能大类的逻辑顺序排,能体现功能的系统性。我通常的做法是:先按功能大类分组,组内按基因数量降序排。这样既保留了功能逻辑,又突出了重点。
4.2 多组比较:堆叠图、分组图还是热图
当你有多组样本时,选择哪种图取决于你想回答什么问题。如果想知道各组的功能组成差异,堆叠柱状图最直观,每组一根柱子,不同颜色代表不同功能类别,柱子的高度比例就是功能组成。如果想知道某个功能类别在各组之间的数量变化,分组柱状图更合适,同一功能类别的柱子并排,方便比较。
热图适合展示更复杂的数据,比如多个样本乘以多个功能类别。热图的颜色深浅代表基因数量或占比,聚类分析可以把功能模式相似的样本聚在一起。用R的pheatmap包画热图:
library(pheatmap) pheatmap(as.matrix(cog_matrix), cluster_rows = TRUE, cluster_cols = TRUE, color = colorRampPalette(c("white", "steelblue"))(100), display_numbers = TRUE, fontsize_number = 8)cog_matrix是一个矩阵,行是功能类别,列是样本,值是基因数量或标准化后的占比。cluster_rows和cluster_cols开启聚类,能发现样本之间的功能相似性。
4.3 统计检验:COG分布差异真的显著吗
如果你在文章里说"处理组的能量代谢相关基因显著富集",审稿人可能会问:显著?P值多少?这时候就需要做统计检验。
COG数据的统计检验通常用卡方检验或者Fisher精确检验,比较各组在各个功能类别上的基因数量分布是否一致。如果样本量大,卡方检验就够了;如果某些类别的基因数很少,Fisher精确检验更稳妥。
# 假设cog_table是一个列联表,行是功能类别,列是样本 chisq.test(cog_table) fisher.test(cog_table, simulate.p.value = TRUE)simulate.p.value = TRUE用于大矩阵的Fisher检验,因为精确计算会很慢。得到P值后,还需要做多重检验校正,用p.adjust函数:
p_values <- apply(cog_table, 1, function(x) chisq.test(matrix(x, nrow = 2))$p.value) p_adjusted <- p.adjust(p_values, method = "BH")method = "BH"是Benjamini-Hochberg校正,控制错误发现率。校正后的P值小于0.05,才能说差异显著。
4.4 从COG图到生物学结论:几个真实案例的解读思路
案例一:某环境样本的COG分布显示,E(氨基酸转运与代谢)和G(碳水化合物转运与代谢)占比最高,合计超过30%。这说明该环境中的微生物群落代谢活性很强,可能在积极分解有机质。结合环境参数(比如有机碳含量高),可以推测这是一个营养丰富的环境。
案例二:某病原菌的COG分布中,U(细胞内运输、分泌与囊泡运输)和N(细胞运动)的占比明显高于非致病菌。这提示该菌株可能具有活跃的分泌系统,能够向宿主细胞分泌效应蛋白,与其致病性相关。
案例三:某极端环境样本的COG分布中,S(功能未知)占比高达25%,远高于普通环境样本。这说明该环境中存在大量功能未知的基因,可能是适应极端条件的特有基因。后续研究可以优先克隆表达这些未知基因,探索其功能。
解读COG图的关键是结合样本的背景信息。同样的功能分布,在不同环境、不同物种里可能有完全不同的生物学含义。不要孤立地看数字,要把数字放回生物学情境里。
5. 那些年我踩过的COG分析坑
5.1 注释覆盖率低不等于分析失败
第一次做COG分析时,我看到结果里只有60%的基因被注释到具体功能类别,剩下40%都是"功能未知"或"一般功能预测",当时就慌了,以为是自己操作有问题。后来查了文献才知道,这是正常现象。非模式生物的基因组里,通常有30%到50%的基因功能未知,因为数据库里的参考基因主要来自模式生物,非模式生物的特有基因很难找到同源匹配。
正确的做法是:在文章里如实报告注释覆盖率,并解释低覆盖率的原因。如果覆盖率特别低(比如低于40%),可以考虑换用更全面的数据库,比如eggNOG或者KEGG,或者放宽比对阈值。但不要为了追求高覆盖率而降低标准,那样会引入假阳性注释。
5.2 多结构域蛋白的归类难题
有些蛋白含有多个结构域,每个结构域可能匹配到不同的COG。比如一个蛋白既有激酶结构域又有DNA结合结构域,它可能同时匹配到T(信号转导)和K(转录)。这时候怎么归类?
我的处理原则是:看哪个结构域是主要功能域。如果激酶结构域覆盖了蛋白的大部分长度,就归为T;如果DNA结合结构域更完整,就归为K。如果两个结构域长度差不多,就保留两个注释,在统计时分别计入。有些工具会自动选择最优匹配,但最优匹配不一定是最合理的生物学归类,需要人工审核。
5.3 不同数据库版本导致的类别漂移
COG数据库经历过多次更新,从最初的COG到后来的eggNOG,功能类别的定义和边界有过调整。如果你用旧版本的数据库做注释,再用新版本的分类标准去解读,可能会出现类别漂移。比如某个基因在旧版里归为R(一般功能预测),在新版里可能被归为S(功能未知)。
避免这个问题的方法是:在文章的方法部分明确写出使用的数据库版本和工具版本。如果要做跨研究比较,尽量用同一版本的数据库重新注释所有数据,而不是直接比较已发表的结果。
5.4 丰度加权:别让低丰度基因淹没高丰度基因
如果你做的是宏基因组数据,每个基因还有丰度信息。直接统计基因数量会忽略丰度差异,一个高丰度基因和一个低丰度基因在数量统计里权重一样。但实际上,高丰度基因对群落功能的贡献更大。
这时候需要做丰度加权。具体做法是:把每个基因的丰度值乘以它的COG类别,然后按类别求和。这样得到的不是基因数量,而是"丰度加权后的功能类别得分"。用这个得分画图,能更真实地反映群落的功能潜力。
# 假设gene_abundance是基因丰度表,cog_annotation是注释表 merged <- merge(gene_abundance, cog_annotation, by = "gene_id") weighted_cog <- aggregate(abundance ~ category, data = merged, FUN = sum)这段代码把丰度和注释合并,然后按类别求和。得到的weighted_cog就是丰度加权后的功能分布。
5.5 可视化时的常见审美陷阱
最后说几个画图时的审美问题。第一,不要用彩虹色系,红橙黄绿青蓝紫全用上,读者分不清哪个是哪个。用同色系的深浅变化,或者用对比明显的两三个色系就够了。第二,不要省略图例,哪怕你觉得颜色很明显,读者不一定知道每个颜色代表什么。第三,横轴标签如果太长,旋转45度或者改成两行,不要硬挤在一行里。第四,保存图片时用PDF或SVG格式,不要用JPG,JPG压缩会损失细节,放大后模糊。
我通常会在R里画完初稿,导出PDF,然后在Inkscape里微调字体大小、颜色、间距。Inkscape是免费开源的矢量图编辑工具,操作逻辑和Illustrator类似,学习成本不高,但对提升图的质感帮助很大。
6. 进阶玩法:COG分析还能怎么用
6.1 比较基因组学中的COG差异分析
COG分析不只适用于单个基因组,还可以用来比较多个基因组的差异。比如你有两个菌株,一个致病一个非致病,想知道它们在功能上有哪些不同。可以分别做COG注释,然后比较各个功能类别的基因数量,找出显著差异的类别。
具体操作是:把两个菌株的COG统计表合并,做卡方检验或者Fisher检验,找出P值小于0.05的类别。这些类别就是两个菌株功能差异的候选区域。然后可以进一步分析这些类别里的具体基因,看哪些基因导致了差异。
6.2 时间序列或梯度样本中的COG动态变化
如果你有多个时间点或者多个梯度样本的宏基因组数据,可以看COG功能类别随时间或梯度的变化趋势。比如在污水处理过程中,随着处理阶段的推进,某些功能类别(如降解有机物的酶)的丰度逐渐升高,而另一些(如应激响应基因)逐渐降低。这种动态变化能揭示群落功能的演替规律。
画这种图可以用折线图或者面积图,横轴是时间或梯度,纵轴是功能类别的丰度加权得分,不同颜色代表不同功能类别。如果类别太多,可以只选变化最显著的几个类别画图,其他的放在补充材料里。
6.3 与代谢通路数据的联合分析
COG和KEGG联合分析能提供更完整的功能视图。COG告诉你哪些功能大类活跃,KEGG告诉你具体哪些通路活跃。比如COG显示G(碳水化合物转运与代谢)占比很高,KEGG可能进一步显示糖酵解通路和TCA循环通路的基因富集。两者结合,就能从宏观到微观完整描述群落的代谢特征。
联合分析的实现方式是:分别做COG和KEGG注释,然后取交集基因,看它们在两个体系里的分布是否一致。如果某个基因在COG里归为G,在KEGG里也出现在糖代谢通路里,说明注释一致,可信度高。如果出现矛盾,就需要人工检查比对结果,看哪个注释更可靠。
6.4 自定义参考数据库的构建思路
如果你研究的物种有大量特有基因,公共数据库的注释覆盖率很低,可以考虑构建自定义的COG参考数据库。思路是:收集该物种或近缘物种的所有已知功能基因,按COG分类体系整理,然后用这些基因做比对参考。
构建自定义数据库需要一定的生物信息学基础,包括序列下载、去冗余、功能分类、数据库格式化等步骤。好处是注释覆盖率会显著提高,因为参考基因和你的目标基因亲缘关系更近。缺点是工作量大,而且只适用于特定物种,通用性差。
7. 工具链与资源清单:我常用的COG分析组合
7.1 比对与注释工具对比
| 工具名称 | 核心功能 | 优势 | 局限 | 适用场景 |
|---|---|---|---|---|
| eggNOG-mapper | 在线/本地COG注释 | 速度快、结果规范、支持批量 | 本地版数据库大 | 常规COG分析 |
| RPS-BLAST | 基于结构域的比对 | 对远缘同源敏感 | 速度慢 | 精细进化分析 |
| DIAMOND | 快速序列比对 | 比BLAST快百倍 | 对短序列敏感度低 | 大批量数据初筛 |
| InterProScan | 综合功能注释 | 整合多个数据库 | 运行时间长 | 需要多维度注释 |
我通常的组合是:先用DIAMOND做快速初筛,把明显能注释上的基因挑出来;剩下的用RPS-BLAST做精细比对;最后用InterProScan做补充注释。这样能在速度和灵敏度之间取得平衡。
7.2 可视化工具的选择建议
R的ggplot2是最灵活的选择,适合需要精细控制的场景。Python的seaborn适合快速出图,代码简洁。如果不想写代码,可以用在线工具,比如微生信、ChiPlot等平台,上传数据就能出图,但自定义程度有限。
对于需要频繁调整的图,我建议用R或Python写脚本,把参数都放在脚本开头,改一个数字就能重新出图,比在线工具反复上传下载高效得多。
7.3 数据库版本与更新策略
COG数据库和eggNOG数据库都在持续更新。建议每年检查一次是否有新版本发布,如果有,用新版本重新注释一遍数据,看看结果是否有变化。如果变化不大,可以继续用旧版本的结果;如果变化显著,需要在文章里说明版本差异。
数据库下载地址通常在各自主页上,eggNOG的数据库文件比较大,下载前确认磁盘空间充足。下载后建议做一次完整性校验,避免文件损坏导致比对失败。
8. 写在最后:COG分析的价值边界与我的个人体会
COG分析不是万能的。它擅长的是宏观功能分类,告诉你基因集大致在干什么,但它不告诉你具体怎么干、干得怎么样。如果你需要精确的代谢通路信息,得靠KEGG;如果你需要标准化的功能描述,得靠GO;如果你需要知道基因的表达水平,得靠转录组数据。COG只是功能注释工具箱里的一把锤子,不是全部。
我在实际项目里的体会是:COG分析最大的价值在于快速建立对基因集的整体认知。拿到一个陌生的基因组或宏基因组,先跑一遍COG,看看功能大类分布,心里就有底了。然后再根据COG结果决定下一步往哪个方向深入——如果代谢类基因多,就重点做代谢通路分析;如果信息存储类基因多,就重点做转录调控分析。COG是起点,不是终点。
还有一个容易被忽略的点:COG结果里的"功能未知"类别,往往是最有研究价值的部分。那些基因之所以未知,可能是因为它们只在特定环境或特定物种里存在,可能承载着独特的生物学功能。如果你做的是新物种或极端环境样本,不妨把"功能未知"的基因单独拿出来,做序列分析、结构预测、甚至实验验证。说不定能发现全新的功能基因。
最后分享一个小技巧:做COG分析时,保留中间文件。比对结果、注释表格、统计脚本、画图代码,全部整理在一个文件夹里,按日期和版本命名。这样半年后你或者你的合作者想复现结果时,不用从头再来。我吃过这个亏,当时觉得结果都出来了,中间文件没用就删了,后来审稿人要求补充分析,只能重新跑一遍,浪费了好几天。从那以后,我养成了保留所有中间文件的习惯,硬盘空间不够就买个移动硬盘,比重新分析的时间成本低多了。