我正在寻求优化这个算法smartWindow
和(以及我原始帖子的过程,它解释了函数的一些上下文以及我如何到达这里:
Vectorizing a loop through lines of data frame R while accessing multiple variables the dataframe)。
目前我的实际数据需要240秒才能运行。我尝试了一些Rprof
似乎chg2 <-
行的smartWindow吃的时间最多。我也在使用cmpfun
在R中尝试了编译器。我想知道有一种方法可以显着提高我正在尝试的速度。
我真正想要的是,如果有一种技术能够在接近20秒而不是240秒的时间内完成我在下面所做的事情。我用各种东西削减了1-5%的计算时间。但我真正想知道的是,如果我可以将时间减少一个大于2的数字。
## the function
smartWindow <- function(tdate, aid, chgdf, datev='Submit.Date', assetv='Asset.ID', fdays=30, bdays=30) {
fdays <- tdate+fdays
bdays <- tdate-bdays
chg2 <- chgdf[chgdf[,assetv]==aid & chgdf[,datev]<fdays & chgdf[,datev]>bdays, ]
ret <- nrow(chg2)
return(ret)
}
## set up some data #################################################
dates <- seq(as.Date('2011-01-01'), as.Date('2013-12-31'), by='days')
aids <- paste(rep(letters[1:26], 3), 1:3, sep='')
n <- 3000
inc <- data.frame(
Submit.Date = sample(dates, n, replace=T),
Asset.ID = sample(aids, n, replace=T))
chg <- data.frame(
Submit.Date = sample(dates, n, replace=T),
Asset.ID = sample(aids, n, replace=T))
## applying function to just one incident ###########################
smartWindow(inc$Submit.Date[1], inc$Asset.ID[1], chgdf=chg, bdays=100)
## applying to every incident... this is process i seek to optimize #########
system.time({
inc$chg_b30 <- apply(inc[,c('Submit.Date', 'Asset.ID')], 1, function(row) smartWindow(as.Date(row[1]), row[2], chgdf=chg,
datev='Submit.Date', assetv='Asset.ID', bdays=30, fdays=0))
})
table(inc$chg_b30)