将数据存储在for循环的数据框中 - rentrez

时间:2017-04-12 23:45:34

标签: r loops rentrez

我试图使用library(rentrez) term <- c('AKR1C1[GENE] AND snp_pubmed[Filter] AND Homo sapiens[Organism]', 'AKR1C2[GENE] AND snp_pubmed[Filter] AND Homo sapiens[Organism]') p.snps <- for (i in seq_along(term)) { entrez_search(db="SNP", term = i, usehistory = "y" ) } 包找到包含PubMed条目的SNP列表。当我运行下面的代码时,我最终得到一个NULL数据帧。我想我没有正确地写数据框。

        trigger={
                  <div>
                    <div className="col-sm-3">
                        Text
                    </div>
                    <div className="col-sm-3">
                        Text
                    </div>
                    <div className="col-sm-3">
                        Text
                    </div>
                  </div>
                }

我想为大约100个基因做这个。

1 个答案:

答案 0 :(得分:2)

<强>问题

有几个问题:

  • for循环不返回值
  • entrez_search的第二个参数应该是表示该术语的字符串,但问题中的代码会将数字传递给数字
  • 问题涉及一个数据框,但返回此问题的自然方式是"esearch"个对象的列表(尽管后来可以进一步转换)。

更正后的代码

试试这个:

p.snps <- vector(length = length(term), mode = "list")

for (i in seq_along(term)) {
  p.snps[[i]] <- entrez_search(db = "SNP", term = term[i], history = "y")
}
names(p.snps) <- term

更短的替代 或全部在一行:

p.snps <- sapply(term, entrez_search, db = "SNP", usehistory = "y", simplify = FALSE)

长表格数据框

要将此列表转换为ids的长格式数据框,并使用第二列提供查询:

ids <- lapply(p.snps, "[[", "ids")
stack(ids)

,并提供:

     values                                                            ind
1  41314625 AKR1C1[GENE] AND snp_pubmed[Filter] AND Homo sapiens[Organism]
2  17344137 AKR1C1[GENE] AND snp_pubmed[Filter] AND Homo sapiens[Organism]
3  11548049 AKR1C1[GENE] AND snp_pubmed[Filter] AND Homo sapiens[Organism]
4   7097713 AKR1C1[GENE] AND snp_pubmed[Filter] AND Homo sapiens[Organism]
...etc...

如果您希望索引值(1,2,...)而不是查询字符串,请在stack语句之前运行此语句:

names(ids) <- seq_along(ids)

在这种情况下,堆栈语句的输出将为:

     values ind
1  41314625   1
2  17344137   1
3  11548049   1
4   7097713   1
5   3930965   1
6   3763675   1
...etc...