2012-07-08 4 views
1

목록이 조금 겹치기 시작하면 나는 그들과 조금 더 고투한다. (다른 사람들도 중첩 된 목록으로 고투 할 수 있다고 생각한다.) 특정 형식으로 정리하고자하는 목록이 있습니다. 여기에 목록의 예는 다음과 같습니다색인 된 합류 목록

ms2 <- list(list(" question", c(" thin", " thick"), " one", c(" simple", 
" big")), list(" infer", " theme", c(" strategy", " guess", " inform" 
), c(" big", " idea", " feel", " one")), list(
    "synthesi", c(" predict", " thin", " thick", " parts", " visual", 
    " determin", " schema", " connect", " background", " knowledge", 
    " strategy", " infer", " question", " importance"), NA_character_, 
    c(" things", " picture")), list(" visual", " strategy", " picture", 
    NA_character_), list(" question", " wonder", c(" them", " one" 
), NA_character_), list(" predict", NA_character_, c(" think", 
" guess", " wonder"), NA_character_)) 

내가 (이것은 단지 첫 번째 목록입니다) 4 개 벡터 아래이 같이 각 2 개 목록을 얻기 위해서 함께 처음 세와 마지막 세 가지 목록을 결합하려는.

list(c("question", "infer", "synthesi", "visual"), 
    c("thin", "thick", "theme", "predict", "parts", 
     "visual", "determin", "schema", "connect", "backgraound", 
     "knowledge", "strategy", "infer", "question", "importance", 
     "strategy"), 
    c("one", "strategy", "guess", "inform", "picture"), 
    c("simple", "big", "idea", "feel", "one", "things", "picture")) 
+1

당신이 그래 당신이 – GSee

+0

를 원하는의 설명과 일치하지 않는 것 준 출력 이것은 설명하기가 더 어려웠습니다. 너희들은 그것을 얻었다. 나는 내가 잘하고있는 것이 아니라는 것을 알았을 때 전혀 설명하지 말았어야했다. 내 예제에는 실제로 너무 많은 것이 포함되어 있습니다 (1 : 3보다는 1 : 4). –

+0

설명문이 출력물에 긁힌 것 같았습니다. : –

답변

3

어떻게 이런 일에 대해 : 정확히 당신이 준 예상 출력과 일치하지 않음을

slice.it <- function(i,x) { 
    slice <- lapply(x, `[[`, i) 
    words <- unlist(slice) 
    words <- words[!is.na(words)] 
} 

lapply(1:4, slice.it, ms2[1:3]) 
# [[1]] 
# [1] " question" " infer" "synthesi" 

# [[2]] 
# [1] " thin"  " thick"  " theme"  " predict" " thin"  
# [6] " thick"  " parts"  " visual"  " determin" " schema"  
# [11] " connect" " background" " knowledge" " strategy" " infer"  
# [16] " question" " importance" 

# [[3]] 
# [1] " one"  " strategy" " guess" " inform" 

# [[4]] 
# [1] " simple" " big"  " big"  " idea" " feel" " one"  " things" 
# [8] " picture" 

참고. 이러한 차이점을 명확히하는 데 도움이 될 수 있습니까?

+0

두 예제 모두 작동하며 일반화 할 수 있습니다.이 해답은 각 부분을 해체한다는 점에서 약간 더 이해할 수 있습니다. 내가 설명하고 잘못된 예를 들었을 때의 재미난 방법은 (GSee가 지적한대로) 아직 관리하고 있습니다. –

3

이것은 출력물에 매우 가깝습니다. 차이점은 모든 단어가 입력에 포함 된 선행 공백을 제거하지 않았다는 것입니다. 당신이 선행 공백을 제거하면 결과의 두번째 요소 "전략"과 "전략"둘 필요가 없습니다

lapply(1:4, function(i) { 
    unique(na.omit(unlist(lapply(ms2, "[", i)[1:4]))) 
}) 
#[[1]] 
#[1] " question" " infer" "synthesi" " visual" 
# 
#[[2]] 
#[1] " thin"  " thick"  " theme"  " predict" " parts"  
#[6] " visual"  " determin" " schema"  " connect" " background" 
#[11] " knowledge" " strategy" " infer"  " question" " importance" 
# 
#[[3]] 
#[1] " one"  " strategy" " guess" " inform" " picture" 
# 
#[[4]] 
#[1] " simple" " big"  " idea" " feel" " one"  " things" " picture" 
+0

내 설명이 내 결과와 일치하지 않습니다. 사과드립니다. 귀하와 Flodel 모두 일반화 가능한 답변을 제공 했음에도 불구하고 +1 –

+1

좋은 점은 다행입니다. 약간 다른 점은 있습니다. lapply (1 : 4, function (i) {x <- unlist (lapply (ms2, "[", i) [1 : 3]); x [! is.na (x)]}))' – GSee