Rmarkdown 和 Renv 的可重复性问题

elc*_*ano 1 r ggplot2 r-markdown tidyverse 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))
```
Run Code Online (Sandbox Code Playgroud)

它应该产生一个像下面这样的情节,有时我会成功并得到它:

在此处输入图片说明

然而,其他时候,我得到了这个替代版本,这是无稽之谈:

在此处输入图片说明

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

好的,会不会是版本号不同?即使考虑到我很久以前就知道这个包的这些不同版本,我也很难理解在任何ggplot 版本中给定此代码如何生成第二个图。如果不是版本号,是否有可能导致此问题的任何提示?

use*_*330 5

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

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

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