我有一個應用程序,要求我根據層數X數據。爲了簡單起見,假設我想要創建一個新的向量,根據觀測的四分位數爲每個觀測分配一個1 - 4的bin。尋求一個高效率的替代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-樣」的方式來解決for循環的低效率是通過矢量化。但是,這個問題困擾着我,因爲我不確定如何在逐個元素的基礎上矢量化邏輯的應用。
有什麼想法?除了設立一些平行工作人員外,我們如何減少運行時間?
-Aaron
'cut'或'findInterval' ...? –