空白会减慢处理速度吗

空白会减慢处理速度吗

我有大量数据要分析,在编写代码时,我倾向于在单词或变量名之间留出空格,所以问题是,如果效率是数字1的优先级,那么空格有代价吗?

c

最佳答案

总之,不!

library(microbenchmark)

f1 <- function(x){
    j   <- rnorm( x , mean = 0 , sd = 1 )         ;
    k   <-      j    *      2         ;
    return(    k     )
}

f2 <- function(x){j<-rnorm(x,mean=0,sd=1);k<-j*2;return(k)}


microbenchmark( f1(1e3) , f2(1e3) , times= 1e3 )
    Unit: microseconds
     expr     min       lq  median      uq      max neval
 f1(1000) 110.763 112.8430 113.554 114.319  677.996  1000
 f2(1000) 110.386 112.6755 113.416 114.151 5717.811  1000

#Even more runs and longer sampling
microbenchmark( f1(1e4) , f2(1e4) , times= 1e4 )
  Unit: milliseconds
      expr      min       lq   median       uq       max neval
 f1(10000) 1.060010 1.074880 1.079174 1.083414 66.791782 10000
 f2(10000) 1.058773 1.074186 1.078485 1.082866  7.491616 10000


编辑

似乎使用microbenchmark似乎是不公平的,因为在循环中运行表达式之前先对其进行解析。但是,使用source意味着每次迭代都必须解析源代码并删除空格。所以我将函数保存到两个单独的文件中,文件的最后一行是函数的调用,例如我的文件f2.R看起来像这样:

f2 <- function(x){j<-rnorm(x,mean=0,sd=1);k<-j*2;return(k)};f2(1e3)


我这样测试它们:

microbenchmark( eval(source("~/Desktop/f2.R")) ,  eval(source("~/Desktop/f1.R")) , times = 1e3)
  Unit: microseconds
                           expr     min       lq   median      uq       max neval
 eval(source("~/Desktop/f2.R")) 649.786 658.6225 663.6485 671.772  7025.662  1000
 eval(source("~/Desktop/f1.R")) 687.023 697.2890 702.2315 710.111 19014.116  1000


以及1e4复制差异的直观表示。


也许在重复解析函数的情况下确实有微小的区别,但这在正常使用情况下不会发生。

关于r - 空白会减慢处理速度吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15368168/

10-12 17:10