我有一个基因列表(Entrenz_IDs: link https://www.dropbox.com/s/phjxkutm3xv2fi6/Ids.csv?dl=0)。我想要这些基因在许多数据集上的一些注释(例如。人类、斑马鱼等)。我正在尝试使用biomaRt。
我尝试的代码是;
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])
}
}我得到的错误是
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我做错了什么吗?
有没有其他方法可以让我做到这一点?
发布于 2015-04-24 21:11:33
我这样设置biomaRt
library(biomaRt)
datasets <- listDatasets(useMart("ensembl"))然后读取数据,确保字符串不会被解释为因素
## file <- file.choose()
file <- "~/Downloads/Ids.csv"
genes <- read.csv(file = file, header = TRUE, sep = ",", stringsAsFactors=FALSE)然后我写了一个函数,它将接受一个数据集、感兴趣的基因和mart,并查询生物艺术。我将getBM()放在tryCatch()中,这意味着它可能会失败,但函数仍将返回值(NULL)。
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
})
}我测试了我的函数,它“工作”,在这个意义上,生物艺术被查询,并返回结果。
> 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?)。
为了处理许多数据集,我编写了
GOannotations <-
lapply(as.character(datasets$dataset), fun, genes$genes, ensembl)https://stackoverflow.com/questions/29753867
复制相似问题