R.

2013-02-09 6 views
5

의 data.frame에 저장된 목록 반복이 질문은 초보자 용 질문이지만 효과적인 Google 검색을위한 적절한 어휘가없는 것 같습니다.R.

나는 각각 의 목록을 포함하는 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

감사합니다.

편집 : 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

나는 당신이 혼란 생각 listdata.frame. 나는 당신의 최종 목표가 목록이라고 생각합니다.

목록을 반복하려면 rapply을 사용할 수 있습니다. 그것은 lapply의 재귀 버전입니다. 예를 들어

: 그래서 lapply을 사용하여 OP

에 의해 편집 한 후 업데이트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) 

목록의 이름을 통해 내가 루프. 각 이름에 대해 [[을 사용하여 요소 목록을 얻습니다 (이름을 가져오고 파일을 heder하려면 [을 사용할 수 있음). 그런 다음 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'가 작동하지 않습니다. (마지막 $ 클러스터 [j], f = print)}'는'NULL'의 많은 줄을 반환합니다. – dd3

+0

@ dd3'rapply'와'for'을 조합 할 필요가 없습니다. 'Rapply'는 leafs를 얻기 위해리스트를 통해 recusrivly 갈 것입니다 .. 당신은'dput (str (final))을 dput하고 제 질문에 그것을 덧붙일 수 있습니까? – agstudy

+0

문제는 단지 이것을 위해하고 싶습니다. 하위 목록 중 한 번에 귀하의 예제에서, 나는 단지'cluster1'의 출력을 얻고, 파일에 쓰고, 다른 클러스터에 대해서도 똑같은 작업을하고 싶습니다. 각각은 다른 파일에 쓰고 있습니다. 요청한 결과를 내 질문에 추가했습니다. 당신의 도움을 주셔서 감사합니다. – dd3

4

는 여기 기본 문제는 여기에 반복하는 방식이 잘못이라고 생각합니다.

는이 같은 일이 더 잘 작동한다고 생각 : 부분 집합에 대한 http://manuals.bioinformatics.ucr.edu/home/programming-in-r#TOC-For-Loop : 여기

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

루프에 대한 문서 입니다 http://www.statmethods.net/management/subset.html

행운

+0

감사합니다. 그러나, 그것은 내 문제를 완전히 해결하지는 못합니다. (나는 당신의 대답을 upvote 하겠지만, 나는 그 일을하는 평판이 없다. 미안.) – dd3