X 개의 티어에 따라 데이터를 저장해야하는 애플리케이션이 있습니다. 일을 간단하게 유지하려면, 관찰의 사 분위수에 따라 각 관찰에 1 - 4의 빈을 할당하는 새 벡터를 만들고 싶다고합시다. 여기 sapply에 대한 효율적인 대안을 찾고 있습니다.
내가 지금까지 가지고 올 한 솔루션입니다 :binner <- function(N){
start <- Sys.time()
vec <- runif(N)
cuts <- quantile(vec, seq(0, 0.75, 0.25))
bins <- sapply(vec, function(x) max(which(x >= cuts)))
end <- Sys.time()
cat('Run time:', end - start)
bins
}
tmp <- binner(100)
tmp
경량 구현을 위해 좋은 작동하지만, 비효율적 정말 빨리 도착 N의 값을 실험 해 (한 번에 이러한 하나를 실행 : 컴퓨터가) 걸려 시작할 수 있습니다
tmp <- binner(1000)
tmp <- binner(10000)
tmp <- binner(100000)
tmp <- binner(1000000)
tmp <- binner(10000000)
나는 고전적인 "R 같은"방법에 대한 루프 비 효율성을 해결하는 것을 알고는 벡터화하는 것입니다. 하지만 이것은 요소별로 논리의 적용을 벡터화하는 방법을 잘 모르기 때문에 저를 당황하게합니다.
의견이 있으십니까? 우리는 평행 한 노동자들을 세우는 것 이외에 어떻게 실행 시간을 줄이려고합니까?
어떻게cut()
이 약
-Aaron
'cut' 또는'findInterval' ...에 대해 5 개 빈을 추가했습니다. –