我有大量数据要分析,在编写代码时,我倾向于在单词或变量名之间留出空格,所以问题是,如果效率是数字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/