Хранение данных во фрейме данных из за цикла - rentrez

Я пытаюсь найти список SNP, которые имеют записи PubMed, используя 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"
                )
}

Я хотел бы сделать это для примерно 100 генов.

1 ответ

Проблемы

Есть несколько проблем:

  • 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...
Другие вопросы по тегам