【问题标题】:In R: How to store the list ouputs of a function in the same list when im in a for-loop?在 R 中:当我在 for 循环中时,如何将函数的列表输出存储在同一个列表中?
【发布时间】:2021-06-25 23:46:30
【问题描述】:

我在数据帧“q$Kegg”中有一个列,其中每一行都是函数“keggGet()”的一个条目,这个函数每次运行时最多有 10 个条目,然后我决定使用循环为了。 我的数据框“q”看起来像:

col1 col2     Kegg       col4 col5
data  .   ath:AT3G05640   .   data
data  .   ath:AT1G53520   .   data
data  .   ath:AT3G10870   .   data
data  .   ath:AT5G02770   .   data

这个函数的输出是一个列表。

的示例

query<-keggGet("ath:AT3G05640") ouput image in Rstudio

原始输出示例

> keggGet("ath:AT3G05640")

[[1]]
[[1]]$ENTRY
        CDS 
"AT3G05640" 

[[1]]$DEFINITION
[1] "(RefSeq) Protein phosphatase 2C family protein"

[[1]]$ORGANISM
                                 ath 
"Arabidopsis thaliana (thale cress)" 

[[1]]$POSITION
[1] "3"

[[1]]$MOTIF
[1] "Pfam: PP2C SpoIIE PP2C_2"

[[1]]$DBLINKS
[1] "NCBI-GeneID: 819731"          "NCBI-ProteinID: NP_001326841" "MIPS: AT3G05640.1"           
[4] "TAIR: AT3G05640"              "UniProt: Q9M9W9"             

[[1]]$AASEQ
  A AAStringSet instance of length 1
    width seq
[1]   358 MGHFSSMFNGIARSFSIKKAKNINSSKSYAKEATDEMAREAK...AAKRLVQQAVRAWNRKRRGIAMDDISAVCLFFHSSSSSPSL

[[1]]$NTSEQ
  A DNAStringSet instance of length 1
    width seq
[1]  1077 ATGGGACATTTCTCTTCCATGTTCAACGGTATAGCTAGATCC...GCCTCTTCTTCCATTCTTCATCGTCGTCGCCATCTCTATAG

如果我必须逐步执行此操作,它将如下所示:

query<-keggGet(c("ath:AT3G05640","ath:AT1G53520",.....)) 
#up to 10 entries each run for my 8000 entries and naming query2, query3,...
#because i don't know how to add the new results to "query" without overwriting.

然后我想创建一个循环,其中每个结果都存储在查询中,就好像我为我的所有条目运行函数一样(不能这样做,因为有 10 个限制)。到现在为止我有:

for (k in q$Kegg) 
{
  query<-keggGet(k)
}

如何将函数的每个输出添加到输出列表“查询”中?

【问题讨论】:

  • 您能否提供您的数据或示例,以便重现性更好?我看到你有一个长度为 1 的列表 - 因此可以在数据帧的一行中拥有一个包含每一行结果的数据帧吗?
  • query &lt;- list(); for (k in seq_along(q$Kegg) ) { query[k] &lt;- keggGet (q$Kegg[k] ) }
  • @CareyCaginalp 示例数据已添加。在我得到所有输出后,我真的想将完整列表转换为适当的数据帧,其中每一行都是一个条目的输出,并且分布在列中,因此很容易阅读,但这将是另一个不同的问题
  • @IRTFM 它工作!谢谢!!!!

标签: r for-loop indexing


【解决方案1】:
query <- list();
for (k in seq_along(q$Kegg) ) {   query[k] <- keggGet (q$Kegg[k] ) } 

初始化一个空列表对象,然后迭代seq_along返回的整数向量以连续分配值以填充该列表到相同长度的范例是沼泽标准R编码。

【讨论】:

    【解决方案2】:

    您可以使用lapply

    query <- lapply(q$Kegg, keggGet)
    

    【讨论】:

      猜你喜欢
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      相关资源
      最近更新 更多