2014-06-12 2 views
3

나는 매우 큰 목록을 가지고 있지만, 일부 요소 (위치)는 NULL이다. 거기에는 아무 것도 없다. 비어 있지 않은 목록의 일부만 추출하고 싶습니다. 여기 내 노력,하지만 난 오류에 직면 :R에서 list의 비어 있지 않은 원소를 추출하는 방법?

ind<-sapply(mylist, function() which(x)!=NULL) 
list<-mylist[ind] 

#Error in which(x) : argument to 'which' is not logical 

누군가가 그것을 구현하는 데 도움이겠습니까?

답변

5

is.null의 논리적 부정을 여기에서 사용할 수 있습니다. 즉 vapply으로리스트를 적용 할 수 있습니다, 우리는 어떤 오류가 의미하는 것은 당신의 브래킷 조건 당신이 있어야합니다 테스트 할, 정확하지 않은 것입니다 [

(mylist <- list(1:5, NULL, letters[1:5])) 
# [[1]] 
# [1] 1 2 3 4 5 

# [[2]] 
# NULL 

# [[3]] 
# [1] "a" "b" "c" "d" "e" 

mylist[vapply(mylist, Negate(is.null), NA)] 
# [[1]] 
# [1] 1 2 3 4 5 

# [[2]] 
# [1] "a" "b" "c" "d" "e" 
1

으로 null 이외의 요소를 반환 할 수 있습니다 which 기능 :

which(x != NULL)

3

보십시오 : 당신의

myList <- list(NULL, c(5,4,3), NULL, 25) 
Filter(Negate(is.null), myList) 
2

상관하지 않는 경우 결과 구조, 당신이 할 수있는 단지 unlist : "-"

unlist(mylist) 
1

하나는 사용하여 새 목록에 포함 "하는"기능이 아니라 사용하여 목록에 널 (null) enteries의 인덱스를 추출 할 수 있습니다.

new_list=list[-which(is.null(list[]))] 

작업 :

1

을해야이 시도 :

list(NULL, 1, 2, 3, NULL, 5) %>% 
    purrr::map_if(is.null, ~ NA_character_) %>% #convert NULL into NA 
    is.na() %>% #find NA 
    `!` %>%  #Negate 
    which()  #get index of Non-NULLs 

또는이 :

list(NULL, 1, 2, 3, NULL, 5) %>% 
    purrr::map_lgl(is.null) %>% 
    `!` %>% #Negate 
    which() 
0
MyList <- list(NULL, c(5, 4, 3), NULL, NULL) 

[[1]] 
NULL 

[[2]] 
[1] 5 4 3 

[[3]] 
NULL 

[[4]] 
NULL 

MyList[!unlist(lapply(MyList,is.null))] 

[[1]] 
[1] 5 4 3 
관련 문제