【问题标题】:How to change two variables using lapply and biomart如何使用 lapply 和 biomart 更改两个变量
【发布时间】:2018-04-29 13:08:41
【问题描述】:

我使用 lapply 和 biomart 来提取 3 个不同物种的同源物。我还需要提取所有同系物的目标 ID,我希望也将 lapply 用于目标 ID,以使我的代码更高效。我到目前为止的代码如下:

加载 Biomart:

library(biomaRt)

设置物种向量

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

与所有物种的合奏建立联系

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

获取人类基因

hsapien_PC_genes <- getBM(attributes = c("ensembl_gene_id", "external_gene_name"), 
                          filters = "biotype", 
                          values = "protein_coding", 
                          mart = ensembl_hsapiens)

ensembl_gene_ID <- hsapien_PC_genes$ensembl_gene_id

获取同源物,但排除人类,因为这些已通过使用物种检索到[2:9]

all_homologues <- list()



all_homologues <- lapply(species[2:9], function(s) getBM(attributes = c("ensembl_gene_id", 
                                                                   "external_gene_name", 
                                                                   paste0(s, c("_homolog_ensembl_gene",
                                                                               "_homolog_associated_gene_name"))),
                                                    filters = "ensembl_gene_id",
                                                    values = c(ensembl_gene_ID),
                                                    mart = ensembl_hsapiens))

这是我遇到问题的地方,我不知道如何对每个物种的 ensembl_gene_id 进行子集化并使用 lapply 来运行它。到目前为止我尝试过的如下:

target_id <- list()

target_id <- lapply(species, function(s) getBM(attributes = c("ensembl_gene_id", 
                                             "external_gene_name", 
                                             "hsapiens_homolog_associated_gene_name", 
                                             "hsapiens_homolog_perc_id"), 
                              filters = "ensembl_gene_id", 
                              values = c(all_homologues[[]][["ensembl_gene_id"]]), 
                              mart = get(paste0("ensembl_", s))))

我可以让它像这样正常工作:

target_id[["mmusculus"]] <- getBM(attributes = c("ensembl_gene_id", 
                                             "external_gene_name", 
                                             "hsapiens_homolog_associated_gene_name", 
                                             "hsapiens_homolog_perc_id"), 
                              filters = "ensembl_gene_id", 
                              values = c(all_homologues[["mmusculus"]]$ensembl_gene_id), 
                              mart = ensembl_mmusulus)

target_id[["ggallus"]] <- getBM(attributes = c("ensembl_gene_id", 
                                                 "external_gene_name", 
                                                 "hsapiens_homolog_associated_gene_name", 
                                                 "hsapiens_homolog_perc_id"), 
                                  filters = "ensembl_gene_id", 
                                  values = c(all_homologues[["ggallus"]]$ensembl_gene_id), 
                                  mart = ensembl_ggallus)

但这并不像让 r 为我自动更改物种那样有效

【问题讨论】:

  • 这是一周前的重复帖子吗?请不要就本质上相同的主题发表重复的帖子。
  • 感谢您的帮助,但这两个问题是相似的,尽管它们实际上要求不同的东西。在上一个问题中,我问在我的代码中更改物种名称的最佳方法是什么。我现在知道最好的方法是使用 lapply,我不知道的是如何同时更改值和市场的物种名称。我尝试过使用 paste0,但我认为我在列表中遇到了问题。希望这能让我的问题更清楚

标签: r loops bioinformatics lapply biomart


【解决方案1】:

我找到了解决办法:

target_id <- lapply(species[-1], function(s) getBM(attributes = c("ensembl_gene_id", 
                                             "external_gene_name", 
                                             "hsapiens_homolog_associated_gene_name", 
                                             "hsapiens_homolog_perc_id"), 
                              filters = "ensembl_gene_id", 
                              values = all_homologues[[paste0(s)]][paste0(s, "_homolog_ensembl_gene")], 
                              mart = ensembl[[paste0(s)]]))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2019-03-08
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    相关资源
    最近更新 更多