问题
有几个问题:
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...