2016-11-10 112 views
1

我试图访问NCBI SRA数据库,查询它的ID列表并将输出保存到矩阵。循环保存输出到矩阵

我正在使用Bioconductor的sradb软件包来做到这一点,现在我可以访问和查询数据库,但它真的很慢,我不知道如何保存循环输出。

文件GPL11154_GSMs.txt包含我感兴趣的ID和它看起来像这样:

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

回答

0

使用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,那么this post是如何做到的。

+0

是的,我转换res.df = as.data.frame(do.call(rbind,res)),然后保存。它工作完美。谢谢 – MenieM