5

我认为这是一个初学者问题,但我似乎没有正确的词汇来进行有效的 Google 搜索。

我有一个 data.frame, final,其中包含一个 列表clusters,每个列表都是字符串列表。

我想遍历每个集群中的字符串列表:for 循环中的 for 循环。

for (j in final$clusters){
    for (i in final$clusters$`j`){
        print final$clusters$`j`[i]
    }
}

j对应于中的列表clusters,并且i对应于中的项目clusters[j]

我试图通过使用每个集群的长度来做到这一点,我认为这类似于length(final$clusters[1]),但这给出了 1,而不是列表的长度。

此外,final$clusters[1]给出 $'1',并在下一行给出簇 1 中的所有字符串。

谢谢。

编辑:dput(str(final))按要求输出:

List of 2
 $ clusters     :List of 1629
  ..$ 1   :
  ..$ 2   : 
  ..$ 3   : 
  ..$ 4   : 
  ..$ 5   : 
  ..$ 6   : 
  ..$ 7   : 
  ..$ 8   : 
  ..$ 9   : 
  ..$ 10  : 
  .. [list output truncated]
 $ cluster_stats: num [1:1629, 1:6] 0.7 0.7 0.7 0.7 0.7 0.7 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:1629] "1" "2" "3" "4" ...
  .. ..$ : chr [1:6] "min" "qu1" "median" "mean" ...
NULL
4

2 回答 2

4

我认为这里的主要问题是你在这里迭代的方式是错误的。

我认为这样的事情会更好:

for (j in final$clusters){
    for (i in final$clusters[j]){
        print i
    }
}

这是循环的文档:http : //manuals.bioinformatics.ucr.edu/home/programming-in-r#TOC-For-Loop 子集:http: //www.statmethods.net/management/subset.html

祝你好运

于 2013-02-09T03:35:27.803 回答
4

我认为您混淆了 alist和 a data.frame。我猜你的 final is object 是一个列表。

要遍历列表,您可以使用rapply. 它是 lapply 的递归版本。

例如:

## I create some reproducible example

cluster1 <- list(a='a',b='b')
cluster2 <- list(c='aaa',d='bbb')
clusters <- list(cluster1,cluster2)
final <- list(clusters)

所以使用rapply

rapply(final,f=print)
[1] "a"
[1] "b"
[1] "aaa"
[1] "bbb"
    a     b     c     d 
  "a"   "b" "aaa" "bbb" 

OP编辑后更新

使用lapply,我遍历列表的名称。[[对于每个名称,我使用([如果您想获取文件的名称和 heder 可以使用)获取元素列表,然后使用write.table. 这里我使用列表中元素的名称来创建文件名。在您的情况下,您的文件名将是 number.(1.txt,...)

    lapply(names(final$clusters),
                      function(x)
                             write.table(x=final$clusters[[x]],
                                         file=paste(x,'.txt',sep='')))
于 2013-02-09T06:24:29.713 回答