R:优化子集和降低因子水平

时间:2016-08-24 12:31:57

标签: r optimization

我正在优化多次调用的R代码,发现以下两个命令占用的时间最多:

dataset <- dataset[which(dataset$responder==T),]

  for (i in 1:ncol(dataset))
    if (is.factor(dataset[,i]))
      dataset[,i] <- dataset[,i][drop=T]

我尝试使用谷歌搜索是否有办法优化这些,但没有找到任何东西。有没有办法改善这些线路,还是这样的速度和它一样快?理想情况下,解决方案不应该要求编译或使代码不可读。

1 个答案:

答案 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
相关问题