2016-05-14 28 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

相关问题