lapply使用biomart的问题

时间:2018-04-25 21:20:34

标签: r bioinformatics lapply biomart

我在提取所有人类基因时尝试使用lapply来改变物种名称。

我还在学习如何使用lapply,我无法弄清楚我做错了什么。

到目前为止,我有:

library(biomaRt)

我创建了marts:

ensembl_hsapiens <- useMart("ensembl", 
                        dataset = "hsapiens_gene_ensembl")
ensembl_mmusculus <- useMart("ensembl", 
                     dataset = "mmusculus_gene_ensembl")
ensembl_ggallus <- useMart("ensembl",
                       dataset = "ggallus_gene_ensembl")

设置物种:

species <- c("hsapiens", "mmusculus", "ggallus")

然后我尝试使用lapply:

species_genes <- lapply(species, function(s) getBM(attributes = c("ensembl_gene_id", 
                                                  "external_gene_name"), 
                                   filters = "biotype", 
                                   values = "protein_coding", 
                                   mart = paste0(s, "_ensembl")))))

它给我一条错误信息:

  

martCheck(mart)中的错误:您必须提供有效的Mart对象。至   创建一个Mart对象使用函数:useMart。检查?useMart for   更多信息。

1 个答案:

答案 0 :(得分:2)

这应该可以解决问题:

species_genes <- lapply(species, function(s) getBM(attributes = c("ensembl_gene_id", 
                                                                  "external_gene_name"), 
                                                   filters = "biotype", 
                                                   values = "protein_coding", 
                                                   mart = get(paste0("ensembl_", s))))

说明:

mart函数中的getBM参数需要类Mart的对象,而不是string

class(ensembl_ggallus)
#output
[1] "Mart"
attr(,"package")
[1] "biomaRt"

使用

paste0("ensembl_", s)

你得到一个字符串,如:

"ensembl_hsapiens"

base函数get按名称搜索环境中的对象。

get("ensembl_hsapiens") 

identical(get("ensembl_hsapiens"), ensembl_hsapiens)
#output
TRUE