Расположение сетки в уценке R - PullRequest
0 голосов
/ 30 января 2019

Есть ли в rmarkdown чистый способ «разложить» или создать какой-то табличный макет?Например, в RShiny вы можете настроить своего рода сетку, а затем поместить элементы (например, текст, таблицы, графики и т. Д.) В эти слоты, чтобы реально контролировать свой внешний вид.Я открыт для вывода в формате HTML, Word или PDF, если уценка не лучший способ.В качестве примера рассмотрим этот файл:

---
title: "Test File"
output: html_document
---

## R Markdown

How do put these side-by-side?

```{r text, echo=FALSE}
summary(cars)
```

```{r plot, echo=FALSE}
plot(speed ~ dist, cars)
```

Можно ли разместить вывод summary() рядом с выводом plot()?Что делать, если я хочу пойти три в ширину: plot() |summary() |summary?

Я был бы открыт и для другого формата / конструкции.Я пытался officer, но изо всех сил пытаюсь заставить этот тип выравнивания в Word работать.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Еще один способ, который я только что нашел, это использовать gridExtra.Вы можете создать свою графику, текстовые объекты, таблицы и т. Д., А затем очень четко определить их структуру и относительные местоположения.

https://cran.r -project.org / web / packages / gridExtra /

Плюсы: Простота в использовании с тонной контроля сетки.Отлично работает с ggplot2.

Минусы: Теперь все изображение (включая текст).Меньшая гибкость с точки зрения того, какие объекты вы помещаете в него.Никакой интерактивности, насколько я могу судить.

В результате я не хотел бы использовать это для объекта HTML.Есть лучшие способы.Для довольно простого, строго контролируемого использования пробелов в Word или PDF этот подход может быть жизнеспособным.

0 голосов
/ 30 января 2019

Вот обходной путь для вывода HTML, который автоматически решает, сколько столбцов необходимо.Этот подход основан на настройке ловушки чанка для изменения вывода уценки.Мы в основном просто выполняем строковые операции (поиск и замена).Я надеюсь, что комментарии в коде достаточно чисты:

MRE:

---
title: "Test File"
output: html_document
---

## R Markdown

```{r, include = F}
library(stringi)
defChunkHook <- knitr::knit_hooks$get("chunk")
knitr::knit_hooks$set(chunk = function(x, options) {
  x <- defChunkHook(x, options)
  if(!is.null(options$multi.col)) {
    x    <- gsub("(\n\`\`\`\n##.*?\`\`\`)", "<div>\\1\n</div>", x)  # wrap div around output chunks
    x    <- gsub("(<img.*?>)", "<div>\\1\n</div>", x)               # wrap div around plots
    ncol <- nrow(stri_locate_all(x, regex = "<div.*?>")[[1]])       # get the number of div elements created
    x    <- gsub("<div>", paste0("<div style=\"width:", 100/ncol,"%;\">"), x)  # add the width to the divs
    x    <- paste0("<div class=\"multi-col\" style=\"display: flex; justify-content: center; align-items: center;\">\n", x, "</div>")  # wrap the mother div around all of the output
  }
  x
})
```

```{r, echo = F, multi.col=T}
summary(cars)
plot(speed ~ dist, cars)
```

```{r, echo = F, multi.col=T}
summary(cars)
plot(speed ~ dist, cars)
plot(mpg ~ hp, mtcars)
```

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...