2016-11-21 3 views
2

У меня есть функция, которая выводит html-код, который корректно отображает, но помещает его в документ уценки. R-фрагмент кода с'results = "asis" `терпит неудачу. Я трассирую проблему обратно в пробелы в своем HTML-коде. Мне нравятся пробелы, потому что они облегчают чтение необработанного HTML-файла. Если вы, пожалуйста, подумаете о том, чтобы установить мой пакет R rockchalk, вы можете запустить это и увидеть то же самое.R markdown asis breaks valid html code

Я показываю, что проблема вызвана пробелами в HTML (которые markdown рассматривает как разметку для кода) в следующем MRE. Выход, который я получаю без дополнительной магии стилей, доступен: http://pj.freefaculty.org/scraps/mre.html

Прокрутка вниз, вы видите, что таблица сломана, но после просеивания лишних пробелов таблица показывает, как предполагалось.

На ваш взгляд, это просто моя ошибка пользователя для того, чтобы полагаться на пробелы в HTML-коде или это ошибка в asis в R markdown.

--- 
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/) 

ответ

3

knitr вариант кусок results='asis' правильно выполнил свою работу. Проблема заключается в том, что Pandoc's Markdown обрабатывает отступы (в четырех пробелах) как литеральные кодовые блоки (<pre></pre>).

Решение либо удаляет ведущие пространства, либо защищает их. Кажется, вы не хотите делать первое. Вы можете передать код HTML на , чтобы выход был защищен во время преобразования Pandoc.

+0

Спасибо за ваше внимание. Я понимаю. Я удалю пробелы, потому что я не хочу добавлять новую зависимость. – pauljohn32

+0

@ pauljohn32 Не могли бы вы указать, какие ведущие пробелы вызывают это. Я сталкиваюсь с сопоставимой проблемой. – Michael