lapply 使用 biomart 的问题

Issue with lapply using biomart

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

我仍在学习如何使用 lapply,我不知道我做错了什么。

到目前为止我有:

library(biomaRt)

我创建了集市:

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")))))

它给我一条错误消息:

Error in martCheck(mart) : You must provide a valid Mart object. To create a Mart object use the function: useMart. Check ?useMart for more information.

这应该可以解决问题:

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))))

解释:

getBM 函数中的 mart 参数需要 class 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