R markdown asis 破坏了有效的 html 代码

标签 r knitr r-markdown

我有一个输出可正确渲染的 html 代码的函数,但将其封装在带有“results = “asis””的 markdown 文档 R 代码块中失败。我将问题追溯到 HTML 代码中的空格。我喜欢这些空格,因为它们使阅读原始 HTML 文件变得更容易。如果您愿意考虑安装我的 R 包“rockchalk”,您可以运行它并看到相同的结果。

我表明该问题是由以下 MRE 中的 HTML 中的空格(markdown 将其视为代码标记)引起的。我在没有任何额外样式表魔法的情况下获得的输出可用: http://pj.freefaculty.org/scraps/mre.html

向下滚动,您会看到表格已损坏,但在筛选出多余的空格后,表格将按预期显示。

在您看来,这只是我的用户错误,因为依赖 HTML 代码中的空格,还是 R markdown 中“asis”中的错误。

---
title: "Guide Documents"
author:
 - name: Paul Johnson
   affiliation: Center for Research Methods and Data Analysis, University of Kansas

abstract:
    Author, please REMEMBER TO INCLUDE AN ABSTRACT BEFORE FINALIZING THIS DOCUMENT!
date: "`r format(Sys.time(), '%Y %B %d')`"
output:
  html_document:
    highlight: haddock
---

```{r setup, include = FALSE}
##This Invisible Chunk is required in all CRMDA documents
outdir <- paste0("tmpout")
if (!file.exists(outdir)) dir.create(outdir, recursive = TRUE)
knitr::opts_chunk$set(echo = TRUE, comment = NA, fig.path = paste0(outdir, "/p-"))
options(width = 70)
```


```{r myregs}
library(rockchalk)
set.seed(2134234)
dat <- data.frame(x1 = rnorm(100), x2 = rnorm(100))
dat$y1 <- 30 + 5 * rnorm(100) + 3 * dat$x1 + 4 * dat$x2
dat$y2 <- rnorm(100) + 5 * dat$x2
m1 <- lm(y1 ~ x1, data = dat)
m2 <- lm(y1 ~ x2, data = dat)
m3 <- lm(y1 ~ x1 + x2, data = dat)
gm1 <- glm(y1 ~ x1, family = Gamma, data = dat)
or1 <- outreg(list("Amod" = m1, "Bmod" = m2, "Gmod" = m3),
              title = "My Three Linear Regressions", float = FALSE, type = "html")
```

```{r browseme}
or1 <- outreg(list("Amod" = m1, "Bmod" = m2, "Gmod" = m3),
              title = "My Three Linear Regressions", float = FALSE, type = "html")
```


```{r flawed, results = "asis"}
cat(or1)
```

```{r cleaned, results = "asis"}
or1 <- gsub("&nbsp;"," ", or1)
or1 <- gsub("^\\ *", "", or1)
or1 <- paste(or1, collapse = "")
or1 <- gsub("\\ \\ \\ \\ \\ \\ ", " ", or1)
or1 <- gsub("\\ \\ \\ ", " ", or1)
cat(or1)
```

```{r sessionInfo, echo = FALSE}
sessionInfo()
```

Available under
[Created Commons license 3.0 <img src="http://crmda.dept.ku.edu/images/cc-3.0.png" alt="CC BY"
style="width: 75px;height: 20px;"/>](http://creativecommons.org/licenses/by/3.0/)

最佳答案

knitr block 选项 results='asis'已正确完成其工作。问题是Pandoc's Markdown将缩进行(四个空格)视为文字代码块 ( <pre></pre> )。

解决方案是删除前导空格,或保护它们。看来你不想做前者。您可以将 HTML 代码传递至 htmltools::HTML()以便在 Pandoc 转换期间保护输出。

关于R markdown asis 破坏了有效的 html 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40730902/

相关文章:

r - 将重复值合二为一后连接两列的更好/更快的方法?

r - 使用 R markdown 和 knitr 生成 PDF 文件,将 R 对象用于 YAML header

r - Knitr :图例太大

sas - 除 R 以外的其他统计软件包中的 Markdown

r - 如何在 Shiny 的应用程序中通过 dataTableProxy 创建跨多个数据表的全局搜索框?

r - 如何从 R 中的前一列中获取值

r - 如何在 R ggplot2 中更改 geom_tile 的调色板

r - tidyverse:绑定(bind)相同维度的列表元素

r - DT::datatable – 格式化选定的列?

r - RMarkdown 中的编号代码块