首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用biomaRt跨多个数据集检索基因注释

使用biomaRt跨多个数据集检索基因注释
EN

Stack Overflow用户
提问于 2015-04-21 00:54:33
回答 1查看 204关注 0票数 0

我有一个基因列表(Entrenz_IDs: link https://www.dropbox.com/s/phjxkutm3xv2fi6/Ids.csv?dl=0)。我想要这些基因在许多数据集上的一些注释(例如。人类、斑马鱼等)。我正在尝试使用biomaRt。

我尝试的代码是;

代码语言:javascript
复制
library(biomaRt)

ensembl=useMart("ensembl")
datasets <- listDatasets(ensembl)

genes <- read.csv(file = file.choose(), header = TRUE, sep = ",")

GOannotations <- list()

for (i in 1:nrow(datasets)) {
       for (j in (genes)) {
            values <- genes$genes[j]
            GOannotations[[i]] <- getBM(attributes = c("ensembl_gene_id", "name_1006", "peptide"),
                          filters = "ensembl_gene_id",
                          values = values,
                          mart = useMart(biomart = "ensembl", dataset = datasets$dataset[i])
           }
     }

我得到的错误是

代码语言:javascript
复制
Error in checkAtAssignment("Mart", "dataset", "AsIs") : 
assignment of an object of class “AsIs” is not valid for @‘dataset’ in an object of class “Mart”; is(value, "character") is not TRUE

我做错了什么吗?

有没有其他方法可以让我做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2015-04-24 21:11:33

我这样设置biomaRt

代码语言:javascript
复制
library(biomaRt)
datasets <- listDatasets(useMart("ensembl"))

然后读取数据,确保字符串不会被解释为因素

代码语言:javascript
复制
## file <- file.choose()
file <- "~/Downloads/Ids.csv"
genes <- read.csv(file = file, header = TRUE, sep = ",", stringsAsFactors=FALSE)

然后我写了一个函数,它将接受一个数据集、感兴趣的基因和mart,并查询生物艺术。我将getBM()放在tryCatch()中,这意味着它可能会失败,但函数仍将返回值(NULL)。

代码语言:javascript
复制
fun <- function(dataset, values, ensembl) 
{
    stopifnot(is.character(dataset), is.character(genes))
    message(dataset)
    tryCatch({
        getBM(attributes = c("ensembl_gene_id", "name_1006", "peptide"),
              filters = "ensembl_gene_id", values = values,
              mart = useMart(biomart = "ensembl", dataset = dataset))
    }, error=function(err) {
        message("data set '", dataset, "' failed: ", conditionMessage(err))
        NULL
    })
}

我测试了我的函数,它“工作”,在这个意义上,生物艺术被查询,并返回结果。

代码语言:javascript
复制
> fun("hsapiens_gene_ensembl", genes$genes, ensembl)
hsapiens_gene_ensembl
[1] ensembl_gene_id name_1006       peptide        
<0 rows> (or 0-length row.names)

显然,它在返回有意义的结果方面不起作用,但这是另一个问题的主题(是否如filters=参数中所宣传的那样是genes$genes集合基因ids?)。

为了处理许多数据集,我编写了

代码语言:javascript
复制
GOannotations <-
    lapply(as.character(datasets$dataset), fun, genes$genes, ensembl)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29753867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档