代码之家  ›  专栏  ›  技术社区  ›  Jack Dean

使用biomart的Lappy问题

  •  1
  • Jack Dean  · 技术社区  · 7 年前

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

    然后我尝试使用Lappy:

    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对象。到 使用函数useMart创建Mart对象。检查useMart for 更多信息。

    1 回复  |  直到 7 年前
        1
  •  2
  •   missuse    7 年前

    这应该可以做到:

    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
    
    推荐文章