当前位置: 首页 > 知识库问答 >
问题:

如何将两个RMarkdown(.Rmd)文件合并到一个输出中?

屈翰飞
2023-03-14

我在同一个文件夹中有两个文件:chapter1。Rmd和第2章。Rmd,包括以下内容:

第一章Rmd

---
title: "Chapter 1"
output: pdf_document
---

## This is chapter 1. {#Chapter1}

Next up: [chapter 2](#Chapter2)

第2章Rmd

---
title: "Chapter 2"
output: pdf_document
---

## This is chapter 2. {#Chapter2}

Previously: [chapter 1](#Chapter1)

如何将它们组合成一个pdf输出?

当然,渲染(input=“chapter1.Rmd”,output\u format=“pdf\u document”)可以完美地工作,但渲染(input=“chapter1.Rmd”,input=“chapter2.Rmd”,output\u format=“pdf\u document”)却不能。

我为什么要这样做?将一个巨大的文档分解成逻辑文件。

我使用了@hadley的bookdown包来构建latex。Rmd,但对于这项特定任务来说,这似乎有些过头了。有没有一个使用knitr/pandoc/linux命令行的简单解决方案?谢谢

共有3个答案

翟鸿振
2023-03-14

这对我有用:

Rmd_bind <- 
    function(dir = ".",
    book_header = readLines(textConnection("---\ntitle: 'Title'\n---")))
{
    old <- setwd(dir)
    if(length(grep("book.Rmd", list.files())) > 0){
    warning("book.Rmd already exists")
    }
    write(book_header, file = "book.Rmd", )
    cfiles <- list.files(pattern = "*.Rmd", )
    ttext <- NULL
    for(i in 1:length(cfiles)){
    text <- readLines(cfiles[i])
    hspan <- grep("---", text)
    text <- text[-c(hspan[1]:hspan[2])]
    write(text, sep = "\n", file = "book.Rmd", append = T)
    }
    render("book.Rmd", output_format = "pdf_document")
    setwd(old)
    }

想象一下有一个更好的解决方案,如果在rmark down或knitr包中有这样的东西会很好。

谢俊英
2023-03-14

我建议人们使用bookdown包从多个R Markdown文件创建报告。它添加了许多有用的功能,例如交叉引用,这对于较长的文档非常有用。

改编@Eric中的示例,这里是一个最小的书签设置示例。主要细节是主文件必须称为index. rmd,并且必须包括附加的YAML行site: bookdown::bookdown_site

指数Rmd

---
title: "A Minimal bookdown document"
site: bookdown::bookdown_site
output:
  bookdown::pdf_document2:
    toc: yes
---

01-介绍。Rmd:

# Chapter 1

This is chapter 1.

```{r}
1
```

02-介绍。Rmd:

# Chapter 2

This is chapter 2.

```{r}
2
```

如果我们编织索引。Rmd bookdown将按字母顺序合并同一目录中的所有文件(可以使用额外的bookdown.yml文件更改此行为)。

一旦您熟悉了这个基本设置,就可以使用附加配置文件(即_bookdown.yml_output.yml)轻松自定义书签文档和输出格式

进一步阅读

  • R减价:最终指南:第11章提供了关于减价的概述
经慈
2023-03-14

2018年8月更新:这个答案是在bookdown出现之前写的,bookdown是一种更强大的基于Rmarkdown的书籍编写方法。查看@Mikey Harper的答案中的最小bookdown示例!

当我想将一个大型报告分解为单独的Rmd时,我通常会创建一个父Rmd,并将章节作为子级包含在内。这种方法对于新用户来说很容易理解,如果包含目录(toc),那么就很容易在章节之间导航。

报告。Rmd

---  
title: My Report  
output: 
  pdf_document:
    toc: yes 
---

```{r child = 'chapter1.Rmd'}
```

```{r child = 'chapter2.Rmd'}
```

第1章Rmd

# Chapter 1

This is chapter 1.

```{r}
1
```

第2章Rmd

# Chapter 2

This is chapter 2.

```{r}
2
```

构建

rmarkdown::render('report.Rmd')

如果您想要一种快速创建子文档块的方法:

rmd <- list.files(pattern = '*.Rmd', recursive = T)
chunks <- paste0("```{r child = '", rmd, "'}\n```\n")
cat(chunks, sep = '\n')
# ```{r child = 'chapter1.Rmd'}
# ```
#
# ```{r child = 'chapter2.Rmd'}
# ```
 类似资料:
  • 问题内容: 我已将syslog设置为使用以下过滤器将日志发送到logstash: 我的应用程序之一的典型消息将具有初始状态和job_id: 几分钟后,另一个日志将具有相同的log_id,不同的状态和处理时间: 这些字段已正确加载,但是创建了两个文档。我希望只为初始日志创建一个文档,然后用第二个日志来更新第一个日志,这意味着更新后的文档将具有以下字段: 如您在logstash conf输出中所看到的

  • 问题内容: 如何使用Java合并两个WAV文件? 我试过了,但是没有正常工作,他们还有其他方法吗? 问题答案: 如果直接使用wav文件的字节,则可以在任何编程语言中使用相同的策略。对于此示例,我将假设两个源文件具有相同的比特率/数字通道,并且具有相同的长度/大小。(否则,您可能可以在开始合并之前对其进行编辑)。 首先看一下WAV规范,我在斯坦福课程网站上找到了一个很好的人: 常见的标头长度为44或

  • 问题内容: 运行后,结果类似于: 第一个元素是我已提取到名为的文件的内联javascript 这可行,但我想将 所有3个文件合并为一个文件 我尝试使用filesmerge.com合并JS文件,但这在引用单个文件时导致错误: 然后,我尝试使用jscompress.com进行合并,尽管这不会产生任何错误,但未呈现react root元素 我也尝试过在create-react-app repo上建议的此

  • 这是我的聊天应用程序文件代码 这是我的服务器。js文件 在途中。js文件 我在写这段代码 TypeError:对象#在C:\Users\Sanjay1\Desktop\fmodule\login\app\routes没有方法“worker”。js:11:7在路由器的pass(C:\Users\Sanjay1\Desktop\node_modules\express\lib\router\index

  • 我有两个xml文件,需要将它们合并为一个xml。以下是示例: orginal.xml文件: 使现代化xml文件: 它们应合并为如下xml文件: 实际上,我想使用更新。xml来更新原始。xml: > update.xml中的新员工应该被添加到original.xml 在更新中修改了员工信息。xml应覆盖相应的员工节点。 我对XSLT略知一二,但我的知识还不足以找出适合合并的XSLT。