【问题标题】:Rmarkdown output to word creates one table instead of twoRmarkdown 输出到 word 创建一个表而不是两个
【发布时间】:2018-02-10 06:55:27
【问题描述】:

Rmarkdown 输出到 word 会创建一个表而不是两个表

当我在 Rstudio 中使用 Rmarkdown 编织 Word 文档时,下面的代码预计会创建两个独立的表格,但它会创建一个组合表格。

代码需要创建一个包含两个表格的 word 文档:

---
title: "Untitled"
output: word_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

## R Markdown


```{r}
knitr::kable(head(iris))
```


```{r}
knitr::kable(head(iris))
```

但它只创建一个:

但是,如果我设置 echo=TRUE,我会得到预期的两个表。当我将相同的文档输出到 HTML 时,它还会创建预期的两个表。 通过单击 Rstudio 中的 knit 按钮创建表格。

问题是:如何获得两张表,而不是一张?

澄清一下:问题不在于创建的两个表之间的空间很小。问题是创建了 one 表。在这个问题所附的图片上,它确实看起来是两个表(因为有两个表头),但它实际上是 一个 表。但是 Axeman 的回答解决了这个问题。我仍然相信这是一个错误,因为在早期版本的 knitr 中,没有必要在表之间指定<br><br>,以确保它们不会合并为一个。

我提交了一份错误报告,但没有人看到它: https://support.rstudio.com/hc/en-us/community/posts/115008683128-Bug-Two-tables-produced-by-knitr-kable-are-rendered-as-one-in-word-output

Rstudio version 1.0.153

> sessionInfo()
R version 3.4.1 (2017-06-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=Danish_Denmark.1252  LC_CTYPE=Danish_Denmark.1252    LC_MONETARY=Danish_Denmark.1252 LC_NUMERIC=C                    LC_TIME=Danish_Denmark.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
 [1] compiler_3.4.1  backports_1.1.0 magrittr_1.5    rprojroot_1.2   htmltools_0.3.6 tools_3.4.1     yaml_2.1.14     Rcpp_0.12.12    rmarkdown_1.6   stringi_1.1.5  
[11] highr_0.6       knitr_1.16      digest_0.6.12   stringr_1.2.0   evaluate_0.10.1

在我家里的机器上我没有这个问题。所以相同的代码生成独立的表,不需要在块之间放置<br><br>。在这台家用机器上,sessioninfo 是这样的:

R version 3.4.1 (2017-06-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
 [1] compiler_3.4.1  backports_1.1.0 magrittr_1.5    rprojroot_1.2   htmltools_0.3.6 tools_3.4.1     yaml_2.1.14     Rcpp_0.12.12   
 [9] stringi_1.1.5   rmarkdown_1.6   knitr_1.17      stringr_1.2.0   digest_0.6.12   evaluate_0.10.1

【问题讨论】:

  • 这里没有问题。
  • 谢谢,更新以澄清问题。
  • 谢谢。我会把它放在别处。

标签: r ms-word rstudio knitr


【解决方案1】:

在两者之间添加一个 HTML 注释,您可以更清晰地分隔表格。

例如

---
title: "Untitled"
output: word_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

## R Markdown

```{r}
knitr::kable(head(iris))
```

<!-- -->

```{r}
knitr::kable(head(iris))
```

如果失败,您可以换行,将&lt;!-- --&gt; 替换为&lt;br&gt;&lt;br&gt;

【讨论】:

  • 已解决,谢谢。现在我得到两张桌子,而不是一张。澄清一下:问题不是桌子之间的空间太小,而是我实际上只有一张桌子。那个表看起来像两个单独的表,因为它有两个标题(带有粗体文本的行),但实际上只有一个。只有当您尝试在 MS Word 中移动它时,这一点才会变得明显。
  • 而不是&lt;br&gt;&lt;br&gt;,它实际上有一个含义(换行符),我建议您使用注释&lt;!-- --&gt; 来分隔两个表。这不是 knitr 的错误。这是 Pandoc 的问题,但也不是错误。 HTML 注释技巧在 Pandoc 中很常见,例如请参阅手册中的“结束列表”部分:pandoc.org/MANUAL.html#ending-a-list 这里的情况类似:您必须在两个表之间有一些东西才能结束第一个表。
  • 感谢@Yihui 的澄清!随意发布您自己的答案或编辑我的答案。
  • ,我的机器不能工作,我仍然只有一张桌子。但是

    确实 工作。
猜你喜欢
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多