1

在提取所有人类基因时,我正在尝试使用 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")))))

它给了我一条错误消息:

martCheck(mart) 中的错误:您必须提供有效的 Mart 对象。要创建一个 Mart 对象,请使用函数:useMart。查看 ?useMart 了解更多信息。

4

1 回答 1

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
于 2018-04-25T21:34:14.570 回答