【问题标题】:Run a loop using values from a list in R使用 R 中列表中的值运行循环
【发布时间】:2018-07-07 13:37:04
【问题描述】:

我是 R 编程新手,我正在使用 BioMart 包来提取基因旁系同源物以获得基因列表。

使用下面的“基因”向量是否可以将每个值单独循环到“getBM”函数的值部分,然后将其输出添加到数据框中?

genes <- C("FGF1", "BRCA1", "FOXP2")

getBM(attributes = c("external_gene_name", "hsapiens_paralog_associated_gene_name"), 
                                  filters = "external_gene_name", 
                                  values =  , mart = ensembl_hsapiens)

以下是我的做法,使用基因向量作为值,但它给了我错误的数字,我知道原因。当我单独尝试基因时,值是正确的,这就是为什么我想循环这些值。

 genes <- C("FGF1", "BRCA1", "FOXP2")

getBM(attributes = c("external_gene_name", "hsapiens_paralog_associated_gene_name"), 
                                  filters = "external_gene_name", 
                                  values = c(genes), mart = ensembl_hsapiens)

【问题讨论】:

    标签: r loops bioinformatics biomart


    【解决方案1】:

    试试类似的东西

    result <- lapply(genes,function(x){getBM(attributes = c("external_gene_name", "hsapiens_paralog_associated_gene_name"), 
                                      filters = "ensembl_gene_id", 
                                      values = x, mart = ensembl_hsapiens)})
    

    遍历你的基因载体。结果将是每个值的结果列表

    【讨论】:

    • 谢谢你成功了,我只需要找到一种方法将这些单独的列表合并到一个表中。抱歉,我是使用 R 的新手,所以我还需要学习很多东西
    • @denis getBM 已经向量化,因为它接受字符串向量为values。所以在这种情况下不需要lapply;只需使用getBM(..., values = genes, ...)
    • @JackDean 合并列表,或者使用sapply 代替 lapply,或者如果输出是数据帧,你可以 rbind 或类似的东西
    • @MauritsEvers 我什至不知道这个函数是否是自制的,所以我提出了最简单的解决方案,考虑到问题中的信息(该函数适用于一个基因) )。但事实上,如果函数是矢量化的,它会更简单
    • 不用担心@denis。这不是批评,只是补充。 getBM使用BioMart API查询和提取基因信息,所以使用矢量化版本肯定会更快。
    【解决方案2】:

    首先,您没有提供reproducible, minimal example;如果您提供自包含的最少代码、说明您尝试过的内容、失败的内容以及预期结果,那么人们更有可能提供帮助。

    除此之外,下面是一个基于您为genes 提供的数据的最小示例。

    # Load the necessary library
    library(biomaRt);
    
    # Your vector of query gene symbols
    genes <- c("FGF1", "BRCA1", "FOXP2");
    
    # The relevant BioMart database and dataset
    mart <- useMart(
        biomart = "ENSEMBL_MART_ENSEMBL",
        dataset = "hsapiens_gene_ensembl");
    
    # Extract attributes from mart for every entry in values
    getBM(
        attributes = c("external_gene_name", "hsapiens_paralog_associated_gene_name"),
        filters = "external_gene_name",
        values =  genes,
        mart = mart);
    #    external_gene_name hsapiens_paralog_associated_gene_name
    # 1                FGF1                                  FGF2
    # 2               BRCA1
    # 3               FOXP2                                 FOXP4
    # 4               FOXP2                                 FOXP1
    # 5               FOXP2                                 FOXP3
    # 6               FOXP2                                 FOXO4
    # 7               FOXP2                                 FOXO6
    # 8               FOXP2                                 FOXO1
    # 9               FOXP2                                 FOXO3
    # 10              FOXP2                                 FOXM1
    

    【讨论】:

    • 很抱歉没有让自己更清楚,我是新来使用论坛的新手,如果我再次发帖会提供更多信息,感谢您的建议。
    • 没问题@JackDean;如果这可以解决您的问题,您可以通过接受答案(设置刻度线)来关闭问题。欢迎来到 SO!
    猜你喜欢
    • 2021-08-15
    • 2017-07-29
    • 2022-11-03
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    相关资源
    最近更新 更多