위치 x가 목록에 저장된 시작 (i = 1 ~ i = max)과 끝 (i = 1 ~ i = max) 위치 사이에 있는지 테스트
Nov 28 2020
목록 내에서 시작 및 끝 위치를 지정하는 간단한 데이터 프레임이 있습니다. 이러한 시작 및 끝 위치는 i 개의 영역을 정의합니다. 이제 주어진 위치가 그러한 지역 내에 있는지 테스트하고 싶습니다. 그렇다면 어떤 지역 (i)에 있는지 알아야합니다.
다음은 간단한 예제 데이터 프레임입니다.
start <- list(c(5,10,15), c(5) ,c(6,11),c(6,11))
end <- list(c(7,11,17), c(10), c(8,12),c(8,12))
imax <- c(3,1,2,2)
position <- c(11,6,9,8)
example <- data.frame(start = I(start), end = I(end), imax = imax, position = position)
시작 위치와 끝 위치가 하나만 있으면 문제가되지 않습니다 (예제 2 행에서와 같이).
data.table::between(example$position[[1]], example$start[[1]], example$end[[1]])
[1] FALSE TRUE FALSE
어떻게 이것을 example $ start 및 example $ end 내의 모든 요소 (i = 1에서 i = max까지)에 대해 쌍으로 확인하는 함수로 바꿀 수 있습니까?
두 번째 단계는 어떤 영역 i (1 ~ imax)가 TRUE인지 검색하는 것입니다.
감사합니다.
답변
Ben Nov 28 2020 at 21:48
이와 같은 기능을 찾고있는 것 같습니다.
당신의로 start
및 end
목록은, 당신은 할 수 있습니다 unlist
. 수행 할 수 있습니다 루프를 통해 각 요소의 페어 확인하려면 start
및 end
최대를 imax
.
둘 이상의 영역을 가질 수 있다고 가정하면 함수 끝에 목록 (또는 다른 항목)을 반환 할 수 있습니다.
my_fun <- function(x) {
vec <- integer(0)
start <- unlist(x[["start"]])
end <- unlist(x[["end"]])
for (i in 1:x[["imax"]]) {
if (between(x[["position"]], start[i], end[i])) vec <- c(vec, i)
}
list(vec)
}
example$regions <- apply(example, 1, my_fun)
산출
start end imax position regions
1 5, 10, 15 7, 11, 17 3 11 2
2 5 10 1 6 1
3 6, 11 8, 12 2 9
4 6, 11 8, 12 2 8 1