【发布时间】:2014-02-22 06:10:33
【问题描述】:
我有一个应用程序要求我根据 X 层数对数据进行分类。为简单起见,假设我想创建一个新向量,根据该观察的四分位数为每个观察分配一个 1 - 4 的 bin。
这是我目前想出的解决方案:
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)
我知道解决 for 循环效率低下的经典“类 R”方法是通过矢量化。不过,这个问题难倒我,因为我不确定如何在逐个元素的基础上矢量化逻辑应用。
有什么想法吗?除了设置一堆并行工作者之外,我们如何降低运行时间?
-亚伦
【问题讨论】:
-
cut或findInterval...?