R 목록이 주어지면 주어진 목록 항목의 색인을 찾고 싶습니다. 예를 들어, "36"항목의 경우, 출력을 "2"로 지정합니다. 또한 lapply를 사용하여 어떻게 이러한 쿼리를 병렬로 수행 할 수 있습니까?목록 항목의 색인 검색 R
리스트
$ 1
[1] "7", "12", "26", "29"
$ 2
[1] "11", "36"
$ 3
[1] "20" "49"
$ 4
[1] "39", "41"여기
R 목록이 주어지면 주어진 목록 항목의 색인을 찾고 싶습니다. 예를 들어, "36"항목의 경우, 출력을 "2"로 지정합니다. 또한 lapply를 사용하여 어떻게 이러한 쿼리를 병렬로 수행 할 수 있습니까?목록 항목의 색인 검색 R
리스트
$ 1
[1] "7", "12", "26", "29"
$ 2
[1] "11", "36"
$ 3
[1] "20" "49"
$ 4
[1] "39", "41"여기
목록의 두 개 이상의 요소가 당신이 검색하는있는 문자열을 포함하는 (? 가능성) 가능성을 허용하는 한 줄의 :
## Some example data
ll <- list(1:4, 5:6, 7:12, 1:12)
ll <- lapply(ll, as.character)
which(sapply(ll, FUN=function(X) "12" %in% X))
# [1] 3 4
먼저 목록에 해당 인덱스에 값을 매핑하는 data.frame으로 목록을 돌 수 있었다
정말 고마워! R은 처음에는 약간의 두통이 될 수 있습니다. – SAT
@Josh : 당신의 예제는'[1] 3 4'을 반환하지 않아야합니까? –
@ CarlWitthoft - 네, 고마워요. (나는 빠른 코드 편집을 일찍했지만 결과 비트를 변경하는 것을 간과했다.) 이제는 그것을 수정했다. 또한, 자신의 것과 같은 것을 자유롭게 편집 할 수 있습니다 (적어도 내 게시물 모두에서)! –
: 다음
ll <- list(c("7", "12", "26", "29"),
c("11", "36"),
c("20", "49"),
c("39", "41"))
df <- data.frame(value = unlist(ll),
index = rep(seq_along(ll), lapply(ll, length)))
df
# value index
# 1 7 1
# 2 12 1
# 3 26 1
# 4 29 1
# 5 11 2
# 6 36 2
# 7 20 3
# 8 49 3
# 9 39 4
# 10 41 4
는 첫 번째 발생의 인덱스를 찾는 match
를 사용하여 함수를 작성 주어진 값의 관세, 보험료 : 당신은 match
때문에 한 번에 많은 단일 값에이 함수를 호출하거나 할 수
find.idx <- function(val)df$index[match(val, df$value)]
는 벡터화 : 물론
find.idx("36")
# [1] 2
find.idx(c("36", "41", "99"))
# [1] 2 4 NA
, 당신은 또한 lapply
을 통해 실행할 수 있습니다 특히 병렬로 실행하려는 경우 다음과 같이하십시오.
lapply(c("36", "41", "99"), find.idx)
# [[1]]
# [1] 2
#
# [[2]]
# [1] 4
#
# [[3]]
# [1] NA
이 마지막 비트를 병렬로 실행하려면 여러 가지 옵션이 있습니다. http://cran.r-project.org/web/views/HighPerformanceComputing.html을 통해 검색하여 옵션을 평가하는 것이 좋습니다.
아마도'lapply (component_list, function (x) any (match (x, "36"))'와 비슷한 것이 당신을 가까이에 있습니다. –
"36"은 두 번째 목록 요소이고 두 번째 요소는 두 번째 요소이기 때문에 예제가 모호합니다. –