2016-05-14 52 views
1

代碼如下:爲什麼這些語句需要不同的時間在R中運行?

a<-function(){ 
    for(i in 1:1000000) 
    w1<-w1+2 
    w1 
} 

b<-function(){ 
    for(i in 1:1000000) 
    w1[1]<-w1[1]+2 
    w1 
} 

c<-function(){ 
    for(i in 1:1000000) 
    w1[1]=w1[1]+2 
    w1 
} 

w1<-1 
system.time(a()) #0.39 
system.time(b()) #1.78 
system.time(c()) #1.89 

唯一的區別是:

w1<-w1+2 
w1[1]<-w1[1]+2 
w1[1]=w1[1]+2 

他們花不同的時間來獲得結果,最大最小的近四倍。

,所以我想知道是什麼原因造成這種差異?

看來=<-之間的區別是略有speed.But有w1<-w1+2w1[1]<-w1[1]+2之間的巨大差異。

+3

索引分配需要更多操作。在這裏玩沒有編譯器優化。 –

回答

2

區別在於開銷。

功能a簡單地把兩個數相加,並把結果存儲在存儲器中。

功能bc是從矢量檢索值和將結果存儲在載體中。從矢量讀取和寫入會導致額外的開銷,這會花費額外的時間。

+0

功能** a **當編寫用於計算的代碼時更好一些? – lemmingxuan

相關問題