2013年8月30日 星期五

[R] 效能(2) compiler套件

Compiler套件的功能是把寫好的R code變成位元碼(byte code),以加快執行速度。

對於懶得動腦優化程式的人還真是一大福音。

用下面這個蠢到不行的function來做demo,這個function傳回的是一條由1到n取log 的向量:

demo<- function(n){
  test<- 1:n
  for(i in length(test)){
    test[i]=log(test[i])
  }
  return(test)
}

用cmpfun函數把它轉成位元碼

> democmp<- compiler::cmpfun(demo)

先來做個十萬筆來比較看看有沒有變快

> system.time(a<- demo(100000))
   user  system elapsed 
  0.142   0.000   0.140 
> system.time(a<- democmp(100000))
  user  system elapsed 
  0.025   0.000   0.024 


現在我們把處裡的資料從十萬筆慢慢拉大到一百萬試試看!
經過窮極無聊的實驗可以發現,隨著函數處裡的資料量,效率的差別也會越明顯。在做大量資料運算的compile真的會是個好幫手喔!!!

沒有留言:

張貼留言