如果行数较少,则代码速度更快

时间:2017-09-14 08:33:40

标签: r performance

我对R代码有疑问。如果你在几行代码上写一个语句,当它也可以在一行中完成时,代码会更快吗?那么,较小的线条意味着更快的执行?

示例:

fileName = paste(directory, "fileTest.csv", sep="")
vars = read.csv(fileName, header=F)
vars = as.matrix(vars)

vars = as.matrix(read.csv(paste(directory, "fileTest.csv", sep=""), header=F))

我可以想象只有一次没关系,但是如果你的代码中发生了很多这样的事情?

1 个答案:

答案 0 :(得分:8)

让我们比较三个函数:一个包含3行的函数,一个包含一行的函数和一个使用管道的函数。

library(microbenchmark)
library(dplyr)
library(ggplot2)

directory <- getwd()
mat <- matrix(rnorm(n=20000),nrow=200)
write.table(mat,"matrix.txt",sep="\t")

# 3-line code
fn1 <- function()
{
  fileName = paste0(directory,"/matrix.txt")
  vars = read.delim(fileName,header=T)
  as.matrix(vars)
}

# 1-line code
fn2 <- function()
{
  as.matrix(read.delim(paste0(directory,"/matrix.txt"),header=T))
}

# using pipe
fn3 <- function()
{
  paste0(directory,"/matrix.txt") %>%
          read.delim(.,header=T) %>%
          as.matrix()
}

现在,运行每个功能1000次并测量运行时间。绘制结果。

mb <- microbenchmark::microbenchmark(fn1(),fn2(),fn3(),times=1000)
ggplot2::autoplot(mb)

enter image description here

我不认为速度上的差异很大。但是还有其他因素(如评论中所述),比如创建中间变量使用了多少内存,代码可读性等。

在我看来,最好使用额外的线条以提高可读性。这使以后更容易编辑/修改代码。有时,拥有中间变量可能有助于调试。如果你有很多事情要做,那么删除不再需要的变量可能是个好主意。