如何使 options(width = 60) 在 R Markdown 中跨代码块持续存在,用作 RStudio 中的笔记本?

How to make options(width = 60) persist across code chunks in R Markdown used as notebook in RStudio?

我有一个 R Markdown 文件,我想通过交互式执行单个 (!) 代码块并查看它们的结果(例如,打印、表格、绘图)显示在代码块下,将其用作 RStudio 中的笔记本。特别是,此时我对编写整个 R Markdown 文件不感兴趣。 .Rmd 文件仅包含以下代码块 A、B 和 C。

```{r A}
options("width")    # => 96 on my system
```

```{r B}
options(width = 60)
options("width")    # => 60
```

```{r C}
options("width")    # => 96 but I expected 60
```

当我打开 RStudio 的新实例时,打开 .Rmd 文件,使用 RStudio 的“清除 Knitr 缓存...”Knit 菜单项清除 knitr 缓存,然后 运行 块,一个由一,在列出的顺序中使用 RStudio 的块特定的“运行 当前块”按钮,我得到 96,我系统上的默认宽度,对于块 A,对于块 B 为 60,对于块 C 为 96。

为什么块 B 中设置的新全局宽度没有保留到块 C 中?

我在 macOS Catalina 上使用 RStudio 版本 1.4.1717 以及 rmarkdown 版本 2.10 和 knitr 版本 1.34。

有人问了一个关于 options(digits = N) 的类似问题 ,提问者只接受了一个答案。但是,答案中给出的示例未能证明 R 的全局选项跨块的持久性,因为相关代码块包含它们自己的 options(digits = ...) 调用。当我在没有 options(digits = ...) 调用的情况下使用额外的代码块在我的系统上测试该答案的示例时,在前一个块中设置的“数字”值 not 持续存在。

只有在 RStudio 中将文档用作笔记本时才会发生这种情况。如果编织整个文档,您应该会看到预期的行为。

我怀疑原因是 RStudio 根据编辑的大小设置了选项 window。我在其中看不到任何可以让您更改此行为的选项,但如果您查看 tools:rstudio 环境中的 .rs.rnb.* 对象,您可能会找到一个选项。它最初加载在 search() 列表中的位置 2。

我不确定你要编织什么,但我遇到了类似的问题,试图在编织到 markdown 文件时防止文本用硬 cut-off 60 换行,并设置 options(width = XXX) 似乎从来都不适合我。

相反,在 YAML header 中,您可以告诉 pandoc 不要换行,而是保留您在 .Rmd.

中输入的文本
output:
  md_document:
    pandoc_args: ["--wrap=preserve"]

同样,不确定您是否编织到 .md 文件,但这可能有用。