我有一个应用程序,要求我根据层数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' ...? –