0

rentrez我正在尝试使用该软件包查找具有 PubMed 条目的 SNP 列表。当我运行下面的代码时,我最终得到一个 NULL 数据框。我认为我没有正确编写数据框。

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"
                )
}

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

4

1 回答 1

3

问题

有几个问题:

  • 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...
于 2017-04-13T01:28:01.537 回答