【问题标题】:Issue with lapply using biomart使用 biomart 的 lapply 问题
【发布时间】:2018-04-25 21:20:34
【问题描述】:

我在提取所有人类基因时尝试使用 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 for 更多信息。

【问题讨论】:

标签: r bioinformatics lapply biomart


【解决方案1】:

这应该可以解决问题:

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 参数需要 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-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 2014-04-11
    • 2021-01-19
    • 2021-01-03
    相关资源
    最近更新 更多