我正在优化多次调用的R代码,发现以下两个命令占用的时间最多:
dataset <- dataset[which(dataset$responder==T),]
for (i in 1:ncol(dataset))
if (is.factor(dataset[,i]))
dataset[,i] <- dataset[,i][drop=T]
我尝试使用谷歌搜索是否有办法优化这些,但没有找到任何东西。有没有办法改善这些线路,还是这样的速度和它一样快?理想情况下,解决方案不应该要求编译或使代码不可读。
答案 0 :(得分:1)
使用矢量化,代码变得稍快一些。
dataset <- droplevels(dataset[dataset$responder==T,])
<强> TEST 强>
library(microbenchmark)
# data
testdata=data.frame(type=c(rep("a", 5000), rep("b", 5000), rep("c",5000)),
responder=c(rep(TRUE, 4000), rep(FALSE,11000)))
# functions
orig <- function(){ ...code in question... }
vect <- function(){ ...code in answer... }
microbenchmark(orig())
Unit: microseconds
expr min lq mean median uq max neval
orig() 638.27 654.929 793.7463 668.535 688.643 6650.592 100
microbenchmark(vect())
Unit: microseconds
expr min lq mean median uq max neval
vect() 618.021 636.0365 768.6891 643.895 665.27 5122.989 100