我对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))
我可以想象只有一次没关系,但是如果你的代码中发生了很多这样的事情?
答案 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)
我不认为速度上的差异很大。但是还有其他因素(如评论中所述),比如创建中间变量使用了多少内存,代码可读性等。
在我看来,最好使用额外的线条以提高可读性。这使以后更容易编辑/修改代码。有时,拥有中间变量可能有助于调试。如果你有很多事情要做,那么删除不再需要的变量可能是个好主意。