Rmarkdown 和 Renv 的再现性问题

Reproducibility problems with Rmarkdown and Renv

我最近注意到同一个 R markdown 文档在 运行 处于不同条件(例如不同项目)时会生成不同的图。作为玩具示例,请考虑以下文档:

---
title: "Example"
output:
  html_document
---

```{r plot, warning=FALSE, echo=FALSE}
library("tidyverse")
tibble(mu = c(-9.4, -9.3, -9.2, -9, -8.9, -8.8, -8.7, -8.5, -8.4, -8.3, 0),
       N = c(1, 2, 1, 1, 1, 3, 1, 1, 1, 1, 3)) %>%
  ggplot() +
  geom_point(aes(x=mu, y=N)) + 
  geom_bar(aes(x=mu, y=N), stat="identity", fill="grey", colour="black", width=0.1) +
  theme(panel.background=element_blank(),
        axis.title=element_text(size=20),
        axis.text=element_text(size=15))
```

它应该会产生如下图这样的情节,有时我会成功并得到它:

然而,其他时候,我得到这个替代版本,这是胡说八道:

我注意到加载 tidyverse 包后,某些版本有所不同。比如第一个ggplot是3.2.1,后面是3.3.0。这后来有一个不同的版本号,因为它在使用 Renv 的 R 项目中单独维护。

好的,可能是版本号不同?即使鉴于我很久以前就知道这个包的这些不同版本,我也很难理解如何在 any ggplot 版本中给出这段代码来生成第二个图。关于可能导致此问题的原因的任何提示,如果不是版本号?

问题是它有时会猜测一个方向,有时会猜测另一个方向。 (你的坏图有水平条。)你可以在 geom_bar 调用中使用 orientation = "x" 强制垂直条。

我认为这是一个错误,它似乎无法确定地选择方向(但请参阅下面的评论)。我在我的系统上看到了同样的事情。我只用了 ggplot2 版本 3.3.0;唯一的区别是我之前 运行 的代码历史。

编辑添加:经过更多测试后,我无法重现不可重现性:-)。 ggplot2 有一些复杂的方向猜测规则;它们对于数据的微小变化是不稳定的,但对于固定数据似乎是稳定的。我猜我在没有意识到的情况下不小心更改了数据集的字符。