首页 > 解决方案 > 了解 R Console 与 Sweave 中函数的反直觉运行时间

问题描述

我正在阅读我在网上找到的关于编写高效 R 代码的教程。我努力看到相同的结果——f1 应该比 f2 快——但我看到的是相反的结果。

我尝试在控制台和 RSweave 环境中运行代码,得到了不同的解决方案。当然,每次运行的时间都不同,但通常 f1 在控制台中的运行时间比 f2 低,但在 RSweave 中则相反——我只是将代码复制到一个 RSweave 块中。

f1 <- function(x){
  return(log((sqrt(x*10^3))))
}

f2 <- function(x){
  a<- x*10^3
  b<- sqrt(a)
  c<- log(b)
  return(c)
}

start_time <- Sys.time()
for(i in 1:1000){
  f1(1)
}
end_time <- Sys.time()
(runtime <-end_time - start_time)
R Console: Time difference of 0.065943 secs
RSweave: Time difference of 0.05585098 secs

start_time <- Sys.time()
for(i in 1:1000){
  f2(1)
}
end_time <- Sys.time()
(runtime2 <-end_time - start_time)
Console: Time difference of 0.1935871 secs
RSweave: Time difference of 0.05243397 secs

RSweave 是否会做一些不同的事情来产生这种奇怪的行为?

标签: rperformancefunctionloops

解决方案


推荐阅读