【问题标题】:How to use knitr to compare performance of different versions of R?如何使用 knitr 比较不同版本 R 的性能?
【发布时间】:2013-03-07 12:35:31
【问题描述】:

我想评估一些代码在不同版本的 R 中的性能。原则上这很容易:

  • 开始R
  • 使用system.time() 测量运行一段代码所需的时间
  • 终止R
  • 冲洗并在不同版本中重复

现在,我想使用knitr 创建一个报告来执行此操作。所以,在我看来,我需要一种机制来在每个块中启动一个新会话。

我该怎么做?


一些示例knitr markdown 代码用作演示。这段代码使用ggplot 绘制了一个图形,但显然两个版本都返回相同的时间,因为我不知道如何为每个块启动一个新版本的 R。

Comparison of R performance
========================================================

# Do analysis in R version 2.14

```{r fig.width=6, fig.height=3}
library(ggplot2)
data(diamonds)

system.time({
  p <- ggplot(diamonds, aes(carat, price/carat, colour=clarity)) + geom_point()
  print(p)
})
```


# Repeat same analysis in R 2.15

```{r fig.width=6, fig.height=3}
library(ggplot2)
data(diamonds)

system.time({
  p <- ggplot(diamonds, aes(carat, price/carat, colour=clarity)) + geom_point()
  print(p)
})
```

【问题讨论】:

  • 难道你不能只有一个 bash 脚​​本或诸如此类的东西来完成 R 会话的所有启动/停止,让每个会话将其结果写入文件,然后使用 knitr 读取所有的日志文件并总结结果?没有那么优雅,但可能更准确、更容易。
  • @AriB.Friedman 是的,可能。但这听起来像是工作!
  • 估计你需要使用system() 来运行另一个R进程...
  • 给我几分钟,我会在knitr 中添加一个Rscript engine

标签: r knitr


【解决方案1】:

knitr was easy 中添加Rscript 引擎,但我被an R bug 阻止了。不管怎样,这个引擎从 version 1.1.5 开始就可以使用,并且将作为 1.2 版在 CRAN 上。

现在您可以指定块选项engine='Rscript'engine.path='path/to/the/desired/Rscript'

对于大规模的性能比较,我认为 Ari B. Friedman 在上面的评论中提出的建议是一种更好的方法。如果您有许多代码块进行比较,那么键入引擎路径将非常繁琐。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-04
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    相关资源
    最近更新 更多