Bioconductor没想象的那么简单-part8-注释信息必知必会

刘小泽写于19.5.22
内容来自Bioc2018的第三章

会接触到的注释资源

  • 芯片注释ChipDb:例如hugene20sttranscriptcluster.db

  • 物种注释OrgDb:如org.Hs.eg.db

  • 位置信息TxDb:它的组成是TxDb.Species.Source.Build.Table
    TxDb.Hsapiens.UCSC.hg19.knownGene ,根据名称就可以推测出,物种是人类,来源是UCSC,版本是hg19,内容是列出已知基因(的位点);

    另外还有一种与之很像,但是是基于Ensembl数据库进行映射注释的EnsDb 包,如:EnsDb.Hsapiens.v79

  • 基因组序列BSgenome,包括物种、提供者、版本、发布日期、发布标准名称、染色体名称等,如BSgenome.Hsapiens.UCSC.hg38

  • 其他:如GO.dbKEGG.db

  • 在线注释库:AnnotationHubbiomaRt [关于AnnotationHub在part5中介绍过]

与注释包的交互

主要利用select函数,它的使用方法是:select(annopkg, keys, columns, keytype)

  • annopkg是注释包名称

  • keys是我们目前有的ID

  • columns是选择转换输出的列,默认是输出全部的列

  • keytype指定转换类型,默认使用central keys,也就是核心类型。

    那么首先我怎么看有多少种类型呢?使用keytypes(annopkg) 或者columns(annopkg)
    另外,我怎么知道其中哪种是核心类型呢?还是有一点规律的:

    • 如果是芯片注释包,central keys就是厂商的探针ID;

    • 也可以看包名称,比如org.Hs.eg.db中有eg,这就代表了Entrez Gene ID;

    • 另外可以加载一个注释包,然后使用head(keys(annopkg)) 看看输出什么内容,帮助猜测;

举个例子

加入现在有一个芯片数据:Affymetrix Human Gene ST 2.0 ,然后想将探针ID转为基因ID

# 比如有5个来自 Affymetrix hugene20 的探针名
ids <- c("16908472","16962185", "16920686","16965513","16819952")
# 转换为一种
library(hugene20sttranscriptcluster.db)
select(hugene20sttranscriptcluster.db, ids, "SYMBOL")
#   PROBEID    SYMBOL
1 16908472 LINC01494
2 16962185      ALG3
3 16920686      <NA>
4 16965513      <NA>
5 16819952      CBFB
#如果要转换成多种,直接可以从keytype参数那里入手
ids <- c('16737401','16657436' ,'16678303') select(hugene20sttranscriptcluster.db, ids, c("SYMBOL","MAP"))
#   PROBEID       SYMBOL     MAP
1  16737401        TRAF6   11p12
2  16657436      DDX11L1 1p36.33
3  16657436 LOC102725121 1p36.33
4  16657436      DDX11L2  2q14.1
5  16657436      DDX11L9 15q26.3
6  16657436     DDX11L10 16p13.3
7  16657436      DDX11L5  9p24.3
8  16657436     DDX11L16    Xq28
9  16657436     DDX11L16    Yq12
10 16678303         ARF1 1q42.13

关于mapIds

从上面例子的结果可以看到,虽然只有三个probe id,但是其中一个probe自己有8个重复项,因为这个探针对应到了多个基因(一般这种情况需要将这个探针去掉)

小tip:如果多个探针对应到一个基因呢?
可以用最值、平均值、中位值或者MAD值进行过滤

select函数相似,但mapIds还可以控制重复值这种情况,需要注意的是:

  • column参数只选择一列
  • 必须指定keytype,而select 对于核心类型可以不指定
  • 增加一个参数:multiVals 用来控制重复值

如果要将probe ID转为Symbol ID,那么就要写成:

mapIds(hugene20sttranscriptcluster.db, ids, "SYMBOL","PROBEID")
 16737401  16657436  16678303 
  "TRAF6" "DDX11L1"    "ARF1"
# 这个结果就没有select返回的许多重复值

上面的例子中没有看到multiVals参数,是因为它有一个默认值first ,表示只保留重复值的第一个,另外还有其他几种:

# 结果返回列表
mapIds(hugene20sttranscriptcluster.db, ids, "SYMBOL", "PROBEID", multiVals = "list")
$`16737401`
[1] "TRAF6"

$`16657436`
[1] "DDX11L1"      "LOC102725121" "DDX11L2"      "DDX11L9"     
[5] "DDX11L10"     "DDX11L5"      "DDX11L16"    

$`16678303`
[1] "ARF1"

# 将重复值作为NA
mapIds(hugene20sttranscriptcluster.db, ids, "SYMBOL", "PROBEID", multiVals = "asNA")
16737401 16657436 16678303 
 "TRAF6"       NA   "ARF1" 

# 过滤掉重复值
mapIds(hugene20sttranscriptcluster.db, ids, "SYMBOL", "PROBEID", multiVals = "filter")
16737401 16678303 
 "TRAF6"   "ARF1" 

小练习

Q1: 利用hugene20sttranscriptcluster.db这个包,将Entrez ID为1000的基因对应的基因名输出
>mapIds(hugene20sttranscriptcluster.db, "1000", "SYMBOL", "ENTREZID", multiVals = "asNA")
  1000 
"CDH2"
Q2: PPARG基因对应的Entrez ID是多少
> mapIds(hugene20sttranscriptcluster.db, "PPARG", "ENTREZID", "SYMBOL", multiVals = "asNA")
 PPARG 
"5468" 
Q3:GAPDH基因的蛋白数据库ID是多少
# 方法一:mapIds
> mapIds(hugene20sttranscriptcluster.db, "GAPDH", "UNIPROT", "SYMBOL")
'select()' returned 1:many mapping between keys and columns
   GAPDH 
"P04406" 
# 方法二:select
> select(hugene20sttranscriptcluster.db, "GAPDH",  "UNIPROT", "SYMBOL")
'select()' returned 1:many mapping between keys and columns
  SYMBOL UNIPROT
1  GAPDH  P04406
2  GAPDH  V9HVZ4
Q4:给定一个探针列表ids2,如何判断有多少探针只比对到一个基因?如何判断一个基因也没比对上?
# 判断只比对到一个基因数量
tmp <- biomaRt::select(hugene20sttranscriptcluster.db, ids,  "SYMBOL", "PROBEID") %>% na.omit()
sum(table(tmp) == 1 )

# 判断一个基因也没比对上(也就是比对结果为NA),此时不需要考虑多重比对的情况,因此可以filter掉
no_na <- mapIds(hugene20sttranscriptcluster.db, ids2, "SYMBOL", "PROBEID",multiVals = "filter") %>% na.omit() %>%length()
no_map <- length(ids2) - no_na #用全部的id数量减去去掉NA之后的数量

欢迎关注我们的公众号~_~  
我们是两个农转生信的小硕,打造生信星球,想让它成为一个不拽术语、通俗易懂的生信知识平台。需要帮助或提出意见请后台留言或发送邮件到jieandze1314@gmail.com

Welcome to our bioinfoplanet!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容