Loading...
墨滴

Rookie宇

2021/12/02  阅读:108  主题:雁栖湖

科研写作,为什么是R Markdown?

作为一个数据驱动的科研工作者,你通常用什么来写作?

  • Microsoft word ?

优点:所见即所得,实时预览结果,使用场景最多

缺点;格式不统一(也许没有两个排版完全一致的word文件)

  • LaTeX ?

优点:命令描述,排版规范

缺点:只能输出为pdf格式,中文编译不友好,学习成本高

  • 我的推荐 R Markdown

R Markdown 与 Word 完全不同,更接近于LaTeX。 能够实现一次输入,即可输出wordpdfhtml不同的输出格式。

在这篇文章中,我希望能说服你尝试使用R Markdown。如果你从来没有使用过R Markdown,特别是如果你对R完全不熟悉,我希望你仍然可以试一试,即使它在开始时看起来很难,但难度一定是小于代码编程,小于LaTeX的。

1教程目标:

  • 了解什么是 RMarkdown 以及为什么要使用它?
  • 了解如何构建 RMarkdown 文件
  • 将 RMarkdown 文件导出为多种输出格式

目录

  1. 什么是 R markdown?
  2. 为什么喜欢 R markdown?
  3. R markdown 安装使用实例
  • 下载Rmarkdown
  • 创建一个Rmarkdown(.Rmd)文件
  • YAML 题头文件
  • Markdown 语法
  • 将 R 脚本中的代码插入到 .Rmd 文件中
  1. .Rmd文件转译生成 .pdf/.docx/.html文档

2什么是 R Markdown?

R Markdown 允许创建文档,作为分析过程的整洁记录。在可重复研究的前填下,我们希望其他研究人员能够轻松理解我们在分析中所做的工作,否则没有人可以确定您是否正确分析了数据。您可以选择创建一个 RMarkdown 文档作为您正在做的论文或项目作业的附录,将其上传到 Github 等在线存储库,或者只是作为个人记录保留,以便您可以快速回顾您的代码和看看你做了什么。 RMarkdown 在其输出(图形、表格等)旁边显示您的代码,并使用常规文本来解释它。

RMarkdown 包含 Markdown 语法, RMarkdown 文件 (.Rmd) 时可以将传统的 Markdown 语法与用 R(或其他编程语言!)编写的代码块一起使用。编译 knit RMarkdown 文件时将生成输出文件(HTML、PDF、DOCX 等)。

3为什么喜欢R markdown?

我喜欢R Markdown的主要原因是它非常适合

  1. 基于数据分析的研究报告
  2. 格式严谨的科研论文
  3. 写一本书

在写研究报告或论文时,我的源文本与我的数据集相连,并调用它来做任何与之相关的事情,从提及它包含多少项,到基于数据创建绘图和表格,建模,分析这一全流程。

为什么不是MS Word?

对于Word,你必须在其他地方运行你的代码分析并生成你的图像和表格,然后将它们插入你的Word中。

我使用 Word写出的报告常常面临的一个问题是,复现不了了。(主要原因是时间久了找不到当时的数据处理结果,或者是版本升级后同样的代码跑就出bug了。)

相反,通过R Markdown,你可以把你的分析过程、思考过程、描述和论述合并到一个地方。在转录你的表格内容时没有打错字的危险。也不会忘记那个图是代表什么,以及如何生成的。如果你的数据发生变化,渲染结果也会随之相应改变。(实现最大的透明度和可重复性)

与MS Word不同,R Markdown(类似于LaTeX)让你专注于内容,而格式则在后面。从某种角度看,当你在写的时候,Word的输入看起来比markdown的输入要漂亮(如果你习惯了的话),但是用R Markdown的输出结果看起来比用Word要整洁得多。

我认为其中的一个原因是,在MS Word中编写你可以使用样式,而在R Markdown中你不能使用样式。所有排版格式都有对应的命令。除此之外,R Markdown(以及LaTeX)相对于MS Word的其他优势是。

  • 图像和表格的格式化。

图表的格式和位置更加整齐,不需要为了适应页面而移动它们,或者说不需要像Word那样移动。

  • 注释文本。

你有一个段落或章节,你还不想去掉,但又想在输出结果中不显示?在MS Word中,你需要剪切并粘贴到另一个文件中。而在R Markdown中,你只需对文本进行注释。(和你编程时的逻辑是一致的)

  • 交叉引用。

创建交叉引用到文本的一部分、数字或表格是非常简单和直接的。引文也成为你文本末尾的参考文献的交叉引用,它们也会自动刷新。而在在MS Word中,每一次修改后,必须选择全文并 "更新字段"。

为什么不是LaTeX呢?

R Markdown与LaTeX有什么不同呢?事实上,R markdown是基于LaTeX来生成PDF输出,所以最终输出的结果看起来是一样的。你甚至可以使用LaTeX代码来写公式(例如, 被呈现为 )

),插入希腊字母(例如 被呈现为 )。

主要的区别是在输入方面

R markdown 是基于 markdown的规则,更容易阅读和书写,而LaTeX的输入源格式学习成本很高。然而,R Markdown以同样简洁但学习成本更低的输入做同样的事情。此外,R Markdown还提供了一系列其他的输出格式,比如htmlword

总结我个人相较于MS word 和 LaTeX, 更喜欢R markdown的原因为:

  • 满足LaTeX式的输入,只需要把重心放在文字内容上。
  • 用LaTeX写公式实在是太舒服了
  • 代码式输入,能实现版本控制。
  • 基于markdown格式,学习成本低于LaTeX。
  • 能够输出pdf、html、word格式。(尤其是word格式,这样便于和别人交流)
  • 参考文献,交叉引用比word更便捷,效果更好。
  • 更适合作为一个work paper,使得研究内容更具可复现性。
  • 只需要确定word模板文件,你就能以该模板生成你的word文件。(对于我来说经常使用word,这个功能十分友好)

4R markdown 安装使用实例

下载 R Markdown

为了让 RMarkdown 在 RStudio 中工作,你首先需要的是 rmarkdown 包,你可以通过在 R 或 RStudio 中运行以下命令从 CRAN 获取它:

install.packages("rmarkdown")
# 如果你想要 LaTeX 输出
install.packages("tinytex")
tinytex::install_tinytex()
library(rmarkdown)

创建 Rmarkdown 文件

创建新的 RMarkdown 文件 (.Rmd),类似于创建 .R 脚本文件,在 RStudio 中选择 File -> New File -> R Markdown..._,然后选择要创建的文件类型。现在我们将专注于 .html 文档,稍后可以轻松将其转换为其他文件类型。

新创建的 .Rmd 文件带有基本说明,包含一些基本的元数据和最小的内容,比如一个标题,一个基于R原生的一些数据集的图,以及一些文本和指向更多文档的超链接。如果这是你第一次使用模板,我建议你先编译knit它。但我们想创建自己的 RMarkdown 脚本,所以继续删除示例文件中的所有内容。

YAML 题头文件

在任何 RMarkdown 脚本的顶部是一个用 --- 括起来的 YAML 标头部分。默认情况下,这包括标题、作者、日期和要输出到的文件类型。许多其他选项可用于不同的功能和格式,请参阅此处了解 .html 选项和此处了解 .pdf 选项。标题部分中的规则将改变整个文档。快速浏览以熟悉可以通过向 YAML 标头添加选项来更改的各种内容。

在新的 .Rmd 脚本的顶部插入这样的内容:

---
title: "一文读懂 Rmarkdown"
author: Rookie宇
date: 2021/08/18
output: # 输出格式,html/pdf/docx
  html_document:
    keep_md: true # 保留 Markdown文件
    df_print: paged
    fig_caption: yes
  bookdown::pdf_document2:
    latex_engine: xelatex
    includes:
        keep_tex: no
  word_document:
    reference_docx: temp/templete.docx #基于已创建好的word模板生成的word文件
  # 参考文献引用
  bibliography:
  - bib/bibliography.bib
---

Markdown 语法

您可以在 R Markdown 文档中使用常规的 Markdown 规则。编译文档后,输出将显示根据以下简单规则格式化的文本。

## 二级标题

5二级标题


**加粗**

加粗


\Rooki宇知乎链接

Rooki宇知乎链接


更多关于markdown 语法的内容可以参考,有很多学习的教程。

写公式

输入

输出结果为:

代码块

YAML 标头下方是您将编写代码、随附说明和任何输出的空间。包含在 .Rmd 文档中的代码应该用三个向后的撇号 ```(重音符号!)括起来。这些被称为代码块,如下所示, Mac 电脑使用快捷键 option+comman+I生成:

library(Matrix)
matrix = Matrix(1:62,3)
print(matrix)
## 2 x 3 Matrix of class "dgeMatrix"
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6

你可以随时通过单击绿色小箭头来运行单个代码块,或者选中所需运行代码按 command + enter 来运行:

代码的输出将出现在代码块的正下方。

代码快的更多操作

首先你需要明确的是你可以在代码块运行你所有的代码,但如果你要引用或展示对象,例如:

print(datafram)

就像在普通 R 脚本中一样,你必须先明确显示dataframe是什么。例如:

A <- c("a""a""b""b")
B <- c(5101520)
dataframe <- data.frame(A, B)
print(dataframe)
##   A  B
## 1 a  5
## 2 a 10
## 3 b 15
## 4 b 20

或者你想导入一个.csv文件,你也应该把对应代码输入到 .Rmd文件中。

dataframe <- read.csv("~/Desktop/Code/dataframe.csv")

或者你只想输出代码运行结果,隐藏代码。

library(table1)
table1(~ factor(manufacturer) + displ + cyl + factor(class) + cty | drv, data = mpg)

常用到的代码块设置:

  • echo = TRUE 同时显示代码块 + 结果。

  • echo = FALSE 不显示代码块,但显示结果。禁止代码出现在最终报告中,但不会禁止结果。为不想看到R 代码的人们编写报告时,就可以使用这个选项。

  • eval=FALSE 可以使得代码仅显示而不实际运行。 这样的代码段如果有名字, 可以在后续代码段中被引用。

  • include=FALSE,可以运行代码,但不会在最终文档中显示代码和结果。

  • message = FALSE或warning = FALSE可以防止消息或警告出现在最终报告中。

  • results = 'hide'可以隐藏文本输出;fig.show = 'hide'可以隐藏图形输出。

  • error = TRUE在代码出现错误时仍然可以生成最终报告。在报告的最终版中,我们很少需要包括出错信息,但在调试 .Rmd 文件时,出错信息是非常有用的。如果使用默认设置 error = FALSE,那么即使只有一个错误,文档生成也会失败。

6.Rmd文件转译生成pdf/docx/html文档

最简单的方式

点击knit选择想要输出的格式即可生成对应文件。

  • 输出word结果如下图所示:
  • 输出html结果如下图所示:

对于pdf、docx、html更多格式模板的自定义设置可以学习 (李东风. (2021, November 5)的R Markdown教程),研究出自己的个性化输出样式。

7Reference

李东风. (2021, November 5). 22 R Markdown文件格式 | R语言教程. Pku.edu.cn. https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/rmarkdown.html#ref-Xie2019:rmarkdown

Layton, R. (2015). Happy collaboration with Rmd to docx. Rstudio.com. https://rmarkdown.rstudio.com/articles_docx.html

Grolemund, G. (2021, April 9). R Markdown: The Definitive Guide. Bookdown.org. https://bookdown.org/yihui/rmarkdown/

‌ ‌

Rookie宇

2021/12/02  阅读:108  主题:雁栖湖

作者介绍

Rookie宇

公众号: R语言vs科研