2013-02-09 18 views
5

これは初心者の質問ですが、効果的なGoogle検索には適切な語彙がないようです。R内のdata.frameに格納されたリストを反復する

私はのリストを含むdata.frame、finalを持っています。それぞれのリストは文字列のリストです。

私は各クラスタの文字列のリストを繰り返していきたいと思います:forループ内のforループ。 、

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

jclustersにリストに対応し、iは私がlength(final$clusters[1])ようなものになるだろうと思った各クラスタの長さを使用してこれを行うにしようとしていたclusters[j]

内の項目に対応しますしかしそれはリストの長さではなく1を与えます。

また、final$clusters[1]は '1' $与え、そして次の行に、クラスタ内のすべての文字列は1

感謝。

EDIT:要求されたとして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 

答えて

3

私はあなたが混乱だと思いますlistおよびdata.frameである。私はあなたの最終的なものがリストであると思います。

リストを反復するにはrapplyを使用できます。それはlapplyの再帰的なバージョンです。例えば

:だからlapplyを使用してOP

、リストの名前によるIループによって編集後の更新rapply

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

を使用して

## I create some reproducible example 

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

。それぞれの名前について、[[を使用して要素リストを取得します(ファイル名とヒーダーを取得する場合は[を使用できます)。次に、write.tableを使用してファイルを書き込みます。ここでは、リスト内の要素の名前を使用してファイル名を作成します。あなたの場合、ファイル名は数字で表示されます(1.txt、...)

lapply(names(final$clusters), 
         function(x) 
          write.table(x=final$clusters[[x]], 
             file=paste(x,'.txt',sep=''))) 
+0

'rapply'は、あなたが述べたように、リストのリストを印刷しています(説明のためにありがとう)。しかし、一度に一つのリストだけを出力したいのですが(実際には 'sink 'を使って'クラスタ'を別のファイルに出力したいと思っていました)、 'print'を動作させることができません@pipo98の助けとあなたの助けを借りて、 'for(最終$クラスタのj){rapply(最終$ clusters [j]、f = print)}'は 'NULL'の数行を返します。 – dd3

+0

@ dd3 'rapply'と' for'を組み合わせる必要はありません。 'Rapply'は葉を取得するためにリストを再帰的に移動します..' dput(str(final)) 'を出力して質問に追加してください... – agstudy

+0

問題は私だけがこれを行うことです一度にサブリストのあなたの例では、 'cluster1'の出力のみを取得し、それをファイルに書き込み、他のクラスタに対しても同様の操作を行いたいと思います。それぞれ別のファイルに書き込みます。リクエストした出力を自分の質問に追加しました。ご協力いただきありがとうございます。 – dd3

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-Loophttp://www.statmethods.net/management/subset.html

幸運

+0

ありがとうございました!しかし、それは私の問題を完全には解決しません。 (私はあなたの答えをアップアップしますが、私はそれをする評判はありません。) – dd3

関連する問題