R MarkDown和R NoteBook之间的区别

214

我试图在高层次上理解R MarkdownR NoteBook之间的区别。我知道它们是相互关联的,但我想弄清楚它们之间的关系。我的理解是:

我知道R Notebooks实际上是R Markdown文档,但我对术语感到困惑。

RStudio的新文件选项既有R Markdown也有R NoteBook,选择其中任意一个都会打开一个R Markdown文件,但是有些细微差异。因此,只是想弄清楚为什么有两个选项以及两者之间的区别?

enter image description here

我知道R Notebooks是最近推出的,而R Markdown已经存在一段时间了。部分的混淆可能是因为在R Notebook推出之前我从未使用过R Markdown,所以我的相关或更具体的问题是:

R NoteBook与仅使用R MarkDown有何不同,或者R NoteBook带来了哪些新功能?

在网络搜索中,所有的结果都指出R Notebook使用R Markdown,但我没有找到关于两者之间具体区别的任何帮助。


1
我使用knitr和LaTeX,所以我选择了R Sweave选项。虽然我没有使用过RMarkdown,但我可以说LaTex可以做任何事情,但这种强大的功能也带来了复杂性和学习曲线。此外,有一个庞大的支持者社区和丰富的书籍和资源。 - lawyeR
1
感谢@lawyeR。我不担心资源问题,而且我能够熟练使用R和LaTeX。我确实想知道Sweave是什么,但我想稍后再考虑它。感谢您对此的见解。目前,我只是在研究这些不同版本的R之间的顶层差异。 - PagMax
9
虽然您很喜欢阅读手册,但是您能否阅读实际提出的问题,在回答问题时针对问题本身作出回应,而不是直接从文档中转载材料并回答?请尽量避免改变原意,使翻译通俗易懂。 - PagMax
9个回答

102
据我了解并从我的设置中看来,没有编码上的区别。区别在于渲染方式。文件扩展名相同。
当您创建一个新的R笔记本时,在标头中的输出选项中添加了“html_notebook”。这就是区别所在。然后,您可以快速预览渲染而无需将其编织。它还每次保存时刷新预览。但是,在该预览中,您没有代码输出(没有图形,没有表格..)(至少在我的设置中)。如果在输出中没有html_notebook,则没有预览按钮。

enter image description here

正如你所看到的,预览选项会出现,但你也可以将其编织成任何格式。这样做时,它将添加到头部代码中。

enter image description here

然而,如果您的头文件中没有{{html_notebook}},则只能编织代码以查看它的外观(整本书)(请忽略我用图片添加的默认选项)。

enter image description here

而且预览选项在下拉菜单中没有显示

enter image description here

否则它的工作方式相同。对于一些默认配置,输出在代码部分也默认隐藏。
请注意,您可以在标题中混合多个输出选项,以便保留预览并保留导出的knit选项。

2
作为附加组件,笔记本存在UTC的错误(考虑到重音和非英文字符)。它会破坏你的输出和文件...所以最好坚持使用Markdown...这一点仍在解决中(据我所知)。 - R. Prost
6
您的答案完全符合我几个月来使用后的感受。让我困惑的是,R Notebook 包含了 R Markdown 的所有功能并且更加强大,那么为什么还要继续使用 R Markdown 呢?您可以使用 R Notebook 直接"编译"而不是"预览",这样就能获得 R Markdown 的全部功能了! - PagMax
2
更多是遗留问题,为了不让已经在使用Rmarkdown的人感到困惑。此外,当前版本的notebook(或R)存在我上面提到的那个bug,基本上阻止了我使用它。我的文本也会在源文件中变成无意义的内容,具体取决于我使用的方式(从rmardown到notebook还是从notebook到rmarkdown)。因此,在我能够解决这个问题之前,我将坚持使用markdown。特别是notebook预览对我来说并不是很有用,只是预览文本而没有图表等等...但它有很大的潜力。 - R. Prost
3
当您使用R Notebook时,肯定会在预览中获得所有输出,包括图形(动态和静态)、表格等。应该修改此答案,并移除声称没有得到输出的声明。由于这个特性,R Notebook具有很大的优势,您可以获得所有输出而无需每次重新编译代码,因为预览记住了您代码块的上一次输出结果。这使您能够迭代地编写代码(这通常是您所需要的)。 - statquant

89

最近我看到了这篇文章,让我对 R Markdown 和 R Notebook 的问题有了清晰的认识。http://uc-r.github.io/r_notebook

以下是几个相关的内容:

编写 R Notebook 文档与编写 R Markdown 文档没有什么区别。文本和代码块语法与你在 R Markdown 教程中学到的一样。主要区别在于 R Notebook 的交互性。主要表现为在执行 R Markdown 文档中的代码块时,所有代码会一次性发送到控制台,但在 R Notebook 中,只有一行代码会被发送。这样,如果某一行代码发生错误,就可以停止执行。

还有关于在 RStudio 中创建 R Notebook 时的 Knit vs. Preview:

预览将显示编辑器内容的呈现 HTML 副本。因此,与 Knit 不同,Preview 不运行任何 R 代码块。相反,显示的是上次在编辑器中运行代码块的输出。

希望你觉得有用。


4
第二部分特别有帮助,以便理解差异! - Carmen Sandoval
1
这个答案对我帮助最大。 - Rafs

33

最重要的区别之一并没有从上述答案中完全清晰地体现出来。

来自Bookdown 书籍3.2.1.3节:

编辑器工具栏上的运行菜单中还有一个重新启动 R 并运行所有块项目,该项目在运行所有块之前为您提供了一个新鲜的 R 会话。这类似于编织按钮,它启动一个单独的 R 会话来编译文档。

换句话说,编织会创建一个新环境并在其中运行所有代码。相比之下,R Notebook 使用全局环境来呈现 HTML 文件。实际上,在 R Notebook 中,每次保存.Rmd文档时,HTML 文件都会发生更改。预览按钮仅以其当前状态打开 HTML 文件。没有代码被运行。预览文字字面意思就是:它只显示已完成的内容。

为什么这很重要?例如,如果打开了一个R Notebook文件.Rmd,但没有运行任何代码块,则HTML文件将渲染所有的标记和输入代码,但不会显示任何输出。或者,假设在控制台中定义了一些变量x,但没有在代码块中定义。如果您尝试在R Notebook中的某个地方使用x,它将正常工作。预览HTML文档也将正常工作。另一方面,编织文档将生成“未知变量”错误,因为编织在新环境中运行所有代码,并且变量x从未在任何markdown文件中定义过。

11

2
这仍然没有解释Markdown和Notebook的区别。(我知道Notebook使用Markdown),但是R Markdown在去年引入R Notebooks之前就已经存在了。那么,R Notebook中有哪些新功能以前仅使用R Markdown是不可能实现的呢? - PagMax
3
我认为区别在于从Rmarkdown文件渲染HTML输出的速度。当您想要使用knitr生成R markdown的html输出时,需要一些时间来“编织”所有代码并生成输出。为了加快速度,您可以使用Rstudio中的Rnotebook“模式”将Rmarkdown以html格式查看,方法是将输出更改为“html_notebook”,这样可以让您重新运行代码块,然后按Ctrl + shift + k(pc),HTML会非常快速地刷新。 - chang02_23
1
我认为OP遇到的问题是这两者之间实际上没有太大的区别。我主要看到的区别,主要是从这里阅读答案时我注意到的,就是RNB允许您独立执行单个R代码块并“内联”,而RMD要求您渲染整个文件或不渲染。想象一下,如果您有一个巨大的文件,只需要检查一下小图表。RNB很适合这种情况。RMD可能需要太长时间来渲染,因此不方便。 - Bryan Goggin
1
@BryanGoggin 你仍然可以在Rmd中执行独立的代码块。 - PagMax

8

相似之处: R Notebook 和 R Markdown document非常相似。Markdown格式适用于两种文件类型。这两种文件格式都可以用于向他人传达代码、结果和评论。用户可以选择将创建的文档编织成HTML、PDF和WORD输出格式。如果代码中有错误,就不会生成输出。运行文件的快捷键是:CTRL+SHIFT+K,插入代码块的快捷键是:CTRL+ALT+I。

R Markdown文档: Rmd文档可以通过向导进行配置,并提供了可重现性文档、演示幻灯片、闪亮应用程序等选项,还可以从模板创建文档。如果更改了代码,则在Rmd输出中执行该输出。它不提供预览文档的选项。YAML头文件的输出格式为:output: html_document

R Notebook文档: R nb文档直接启动,不会出现向导(如.RMD)。除笔记本文件外,还会生成一个扩展名为*.nb.html的附加html文件。笔记本具有预览选项。如果更改或编辑任何代码,则不会显示新的输出。输出仅在代码编辑器中呈现旧输出。要显示代码输出,我们需要执行块,然后它将出现在输出中。YAML头文件的输出是:output: html_notebook

YAML头文件:如果我们从一个文件更改YAML头到另一个文件,它将更改文档的类型。例如,您有一个YAML标头为html_notebook的R笔记本。如果更改了YAML头,则您的R笔记本将转换为R Markdown文档。

如果必须选择其中一种,请使用RMarkdown文档,因为它提供更多控制,并在编织时立即更新文档。


7

这是我发现的一个实际区别:

当您需要注释掉一部分文本时,RMarkdown 会在每行文本中插入 # 标记,而 RNotebook 则会将文本封装在一对 <!-----> 标记之间(就像 html 文件一样)。

有人可能会说这只是微不足道的差异。然而,正是因为这个原因,我现在总是使用 RNotebook(而不是 RMarkdown)来撰写所有文档。在其他方面,它们看起来相同(至少对于我的需求,如生成 html 和 pdf 文档)。

否则,我的注释突然变成了标题,例如下面的示例:

# This part is commented out, but will show as Heading 1 font text

R Markdown 也使用 <!-- --> 来注释文本块。只有代码块使用 # 进行注释。我的 RStudio 版本是 1.3.1056。 - Rafs

4

4
我同意。"预览"功能是两者之间的唯一区别。我不知道为什么他们还坚持使用Rmarkdown,因为Rnotebook除了新增了预览功能外,已经包含了Rmarkdown的所有功能。 - PagMax

3

来自jrnold

R Notebook文件在编辑器中显示输出,同时隐藏控制台。R Markdown文件在控制台中显示输出,并且不在编辑器中显示输出。它们的YAML头部分的output值不同。
R Notebook的YAML头部分将有以下行:

---
ouptut: html_notebook
---

R markdown文件的YAML标题应包含以下行:
ouptut: html_document

将R Notebook中的YAML头部复制到R Markdown文件中,可以将其转换为R Markdown文件,反之亦然。更具体地说,将output的值更改为This is because RStudio IDE在打开文件时,以及rmarkdown包在编织文件时,使用文件的YAML头部,特别是YAML头部中output键的值来确定文档类型。


-1

一个R文件中包含着R编程语言的代码。

而另一方面,R Markdown是一个Markdown文件("Markdown是一种轻量级标记语言,用于使用纯文本编辑器创建格式化文本"来自daringfireball.net/projects/markdown),其中嵌入了R代码块。
R代码块允许在RStudio中运行整个块或单个行。更重要的是,当您导出R Markdown文件时,您会发现Markdown文本显示为文本,而R代码块默认情况下显示为灰色的代码块。 RMarkdown旨在使R更具动态性,特别是用于创建报告。 R Markdown已被科学界广泛用于生成报告。


阅读问题。它并不是在询问R和R Markdown之间的区别。 - PagMax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接