Цикл сохранения вывода в матрицу
Я пытаюсь получить доступ к базе данных NCBI SRA, запросить ее список идентификаторов и сохранить вывод в матрицу.
Для этого я использую пакет sradb от Bioconductor, и теперь я могу обращаться к базе данных и запрашивать ее, но она действительно медленная, и я не мог понять, как сохранить выходные данные цикла.
Файл GPL11154_GSMs.txt содержит идентификаторы, которые меня интересуют. И выглядит это так:
GSM616127
GSM616128
GSM616129
GSM663427
GSM665037
То, что у меня сейчас, обновляет результат на каждой итерации.
#source("https://bioconductor.org/biocLite.R")
#biocLite("SRAdb")
library(SRAdb)
#connect to databasse
sqlfile <- getSRAdbFile()
sra_con <- dbConnect(SQLite(),sqlfile)
## lists all the tables in the SQLite database
sra_tables <- dbListTables(sra_con)
sra_tables
dbGetQuery(sra_con,'PRAGMA TABLE_INFO(study)')
## checking the structure of the tables
#dbListFields(sra_con,"experiment")
#dbListFields(sra_con,"run")
#read in file with sample IDs per platform
x <- scan("GPL11154_GSMs.txt", what="", sep="\n")
gsm_list <- strsplit(x, "[[:space:]]+") # Separate elements by one or more whitepace
for (gsm in gsm_list){
gsm_to_srr <- getSRA(search_terms = gsm, out_types = c("submission", "study", "sample","experiment", "run"), sra_con)
print(gsm_to_srr)
}
1 ответ
С помощью lapply
вместо forloop
, пытаться:
res <- lapply(gsm_list, function(gsm){
getSRA(search_terms = gsm,
out_types = c("submission", "study",
"sample","experiment", "run"),
sra_con) })
Из руководств, getSRA
должен вернуть data.frame, так res
Объект будет иметь список data.frames. Если нам нужно преобразовать список data.frames в один data.frame, этот пост о том, как это сделать.