「Bioconductor」不要轻易相信AnnotationHub的物种注释包

2024-06-23 20:58

本文主要是介绍「Bioconductor」不要轻易相信AnnotationHub的物种注释包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Bioconductor开发的物种注释包系列集合了一个物种不同来源的注释信息,能够根据基因ID对其进行多种来源的注释,比如说基因的别名,基因的功能等。

我之前也写过一篇文章用Bioconductor对基因组注释介绍如何使用AnnotationHub下载注释数据库, 使用select(), mapIds等函数进行注释操作。我自己写一个流程也用到了它给基因ID, 如AT1G14185, 注释别名和功能描述。 注释结果中会出现一些基因无法被注释, 比如说下面这些情况, 我一直认为只是这些基因没有得到比较好的研究, 即便这些基因能够在TAIR搜到Araport的注释, 我也认为那些注释只是同源注释没有多大意义。

AT1G13970   NA  NA
AT1G14120   NA  NA
AT1G14240   NA  NA
AT1G14600   NA  NA

一开始得到的结果里没有多少个基因,所以缺少几个注释,通过手工去查找也行,但是目前差异表达分析动不动就给别人500多个基因,于是就有几十个甚至上百个未注释的基因,所以我想着要不自己更新拟南芥的物种包。

library(AnnotationHub)
ah <- AnnotationHub()
org <- ah[["AH57965"]]
org#...# TAIRGENEURL: ftp://ftp.arabidopsis.org/home/tair/Genes/TAIR10_genome_release/TAIR10_functional_descriptions#...

通过上面的代码,我找到了基因功能描述的数据库来源文件,我下载了这个文件,并且拿用AnnotationHub注释不到的功能的一个基因,”AT1G14185”,进行测试

mapIds(org, "AT1G14185", "GENENAME", "TAIR")
2013053-fb7fd9ab6f366d01
img

这下就非常有趣了,在原始文件中能搜索到的基因用Bioconductor的物种注释包时却没有注释信息!为了搞清楚这个原因,我花了快半个下午的时间去折腾,终于被我找到了原因。 我分别用一个能被org.At.tair.db注释和一个不能被org.At.tair.db的注释去搜索原始文本.

# 无注释
1   AT1G14185.1
2   protein_coding
3   Glucose-methanol-choline (GMC) oxidoreductase family protein
4
5   Glucose-methanol-choline (GMC) oxidoreductase family protein; FUNCTIONS IN: ...
# 有注释
1   AT1G19610.1
2   protein_coding
3   Arabidopsis defensin-like protein
4   Predicted to encode a PR (pathogenesis-related) protein.  ...
5   PDF1.4; FUNCTIONS IN: molecular_function unknown;

简单的比较之后,你差不多就知道了org.At.tair.db的在功能描述这一部分其实只用第一列和第四列(为了方便展示我转置了原始数据)。这就是非常让人意外了,为啥它不用第一列和第三列呢? 我于是又去看了其他几个基因,就差不多明白了,原始的文本特别的混乱,你除了能保证第一列和第二列有信息外,其他列你根本无法保证,因此最好的策略以第一列作为检索的关键字,其他列合并成一列才行,然而作者没有那么细致。

于是我就放弃了用org.At.tair.db注释基因功能描述和基因别名了,还是自己写一个Python脚本进行注释吧。

下面这个脚本只适用于bed格式的输入,且第四列为转录本ID,另外两个输入文件分别为”gene_aliases_20140331.txt”和”TAIR10_functional_descriptions_20140331.txt”, 用法为

python bed_anno.py to_anno.bed gene_aliases_20140331.txt TAIR10_functional_descriptions_20140331.txt > anno.xls
import sysfrom collections import defaultdictbed_file = sys.argv[1]
alias_file = sys.argv[2]
func_file  = sys.argv[3]alias_dict = defaultdict(list)
func_dict  = defaultdict(list)# read alias file
for line in open(alias_file, 'r'):items = line.strip().split('\t')alias_dict[items[0]] = items[1:]# read function description file
for line in open(func_file, 'r'):items = line.strip().split('\t')func_dict[items[0]] = items[1:]# annotation and output
for line in open(bed_file, 'r'):transcript_id = line.strip().split("\t")[3]gene_id = transcript_id.split(".")[0]gene_alias = alias_dict[gene_id] if len(alias_dict[gene_id]) > 0 else ['']gene_func = func_dict[transcript_id] if len(func_dict[transcript_id]) > 0 else ['']gene_anno  = '{}\t{}\t{}'.format(line.strip(), gene_alias[0], '\t'.join(gene_func))print(gene_anno)

这篇关于「Bioconductor」不要轻易相信AnnotationHub的物种注释包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088256

相关文章

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode

模具要不要建设3D打印中心

随着3D打印技术的日益成熟与广泛应用,模具企业迎来了自建3D打印中心的热潮。这一举措不仅为企业带来了前所未有的发展机遇,同时也伴随着一系列需要克服的挑战,如何看待企业引进增材制造,小编为您全面分析。 机遇篇: 加速产品创新:3D打印技术如同一把钥匙,为模具企业解锁了快速迭代产品设计的可能。企业能够迅速将创意转化为实体模型,缩短产品从设计到市场的周期,抢占市场先机。 强化定制化服务:面

在 Qt Creator 中,输入 /** 并按下Enter可以自动生成 Doxygen 风格的注释

在 Qt Creator 中,当你输入 /** 时,确实会自动补全标准的 Doxygen 风格注释。这是因为 Qt Creator 支持 Doxygen 以及类似的文档注释风格,并且提供了代码自动补全功能。 以下是如何在 Qt Creator 中使用和显示这些注释标记的步骤: 1. 自动补全 Doxygen 风格注释 在 Qt Creator 中,你可以这样操作: 在你的代码中,将光标放在

单细胞降维聚类分群注释全流程学习(seruat5/harmony)

先前置几个推文~ 单细胞天地: https://mp.weixin.qq.com/s/drmfwJgbFsFCtoaMsMGaUA https://mp.weixin.qq.com/s/3uWO8AP-16ynpRQEnEezSw 生信技能树: https://mp.weixin.qq.com/s/Cp7EIXa72nxF3FHXvtweeg https://mp.weixin.qq.

数据结构——双链表实现和注释浅解

关于双链表的基础部分增删查改的实现和一点理解,写在注释里~  前言              浅记   1. 哨兵位的节点不能被删除,节点的地址也不能发生改变,所以是传一级指针 2. 哨兵位并不存储有效数据,所以它并不是有效节点 3. 双向链表为空时,说明只剩下一个头节点(哨兵位)  List.h #pragma once#include<

A-loam源码注释-头文件lidarFactor.hpp

本篇博客是A-loam学习的笔记,用于SLAM初学者一起学习。 lidarFactor.hpp #include <ceres/ceres.h> #include <ceres/rotation.h> #include <eigen3/Eigen/Dense> #include <pcl/point_cloud.h> #include <pcl/point_types.h> #include

02 Shell Script注释和debug

Shell Script注释和debug 一、ShellScript注释 ​ # 代表不解释不执行 ​ 语法:# # 创建myshell.sh文件[root@localhost ~]# vi myshell.sh # 写入内容#!/bin/bash# 打印hello world(正确)echo "hello world"echo "hello 2" # 注释2(正确)echo

大家不要退小黄车的押金了

大家好,首先我不是ofo的任何人,我只是一名小黄车的使用者,从去年开始就一直关注这ofo、摩拜的信息,最近这段时间ofo陷入了囧境,大家都担心自己的押金,全都去退还押金,这样无疑是给ofo有一层打击,因为本来资金已经很紧张了,ofo的用户也不在少数,没有资本的涌入,它也挺可怜的,它去哪里给你们退钱呢。           ofo的诞生,给我们提供了方便我们是毋庸置疑的,不光是

【开发工具】开发过程中,怎么通过Easy JavaDoc快速生成注释。

文章目录 引言什么是Easy JavaDoc?Easy JavaDoc用来干什么?如何使用Easy JavaDoc?安装Easy JavaDoc配置Easy JavaDoc使用Easy JavaDoc生成注释 Easy JavaDoc与IDEA自带注释的区别IDEA自带注释Easy JavaDoc Easy JavaDoc的优缺点优点缺点 步骤 1:打开设置步骤 2:找到Easy JavaD