为什么这些语句需要不同的时间在R中运行?

为什么这些语句需要不同的时间在R中运行?,r,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(

代码如下:

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

a区别在于开销

函数
a
只是将两个数字相加并将结果存储在内存中


函数
b
c
从向量中检索值并将结果存储在向量中。读取和写入向量会导致额外的开销,这需要额外的时间。

索引赋值需要更多的操作。这里没有编译器优化。那么,当编写用于计算的代码时,函数更好吗?
w1<-w1+2
w1[1]<-w1[1]+2
w1[1]=w1[1]+2