2014-06-07 2 views
0

의 목록에 대한 함수 이것은 쉽지만, 하나의 요소가 포함 된 목록의 인덱스를 반환하는 방법을 찾고자합니다. 예를 들어, 아래 목록에서 "a"가 요소 인 모든 색인을 찾고 싶다고합시다. 색인을 반환하는 함수가 필요합니다.which() in R

> x = list(c("a", "b"), "c") 

> x 
[[1]] 
[1] "a" "b" 

[[2]] 
[1] "c" 

> which(x=="a") 

integer(0) 

물론()는 여기서 작동하지 않습니다. 어떤 도움을 주시면 감사하겠습니다!

답변

4

목록 요소를 반복하고 각 집합의 요소를 확인해야합니다.

sapply(x, function(e) is.element('a', e)) 
## [1] TRUE FALSE 
which(sapply(x, function(e) is.element('a', e))) 
## [1] 1 

sapply 식은 a리스트의 각 원소의 존재를 나타내는 논리 벡터를 반환하고 whichTRUE 원소의 인덱스를 반환한다.

0

형식 결과를 원하는 방식이 정확히 나에게 명확하지 않습니다. 두 개의 목록 요소가 있기 때문에 목록을 더 길게 만들 때 색인 요소를 벡터로 사용하기를 원한다면 어떤 목록 요소가 일치했는지 판단하기가 어려울 수 있습니다. 여기서 which을 사용할 수 있습니다. 그냥

sapply(x, function(y) which(y == "a"))

쓰기 아니면 일치 패턴의 인덱스를 반환 grep을 사용할 수 있습니다. 목록에없는 목록에서 사용 된 다음 목록에서 반복되는 것을 보여 드리겠습니다.

> grep("a", unlist(x)) 
# [1] 1 
> sapply(x, function(y) grep("a", y)) 
# [[1]] 
# [1] 1 

# [[2]] 
# integer(0) 

또한 "a"의 발생이 정확히보고 %in%를 사용할 수 있습니다. 이것은 논리 벡터를 반환합니다.

> lapply(x, `%in%`, "a") ## or lapply(x, `==`, "a") 
# [[1]] 
# [1] TRUE FALSE 

# [[2]] 
# [1] FALSE