Раздел 2 столбцов в R Markdown

Я очень новичок в R Markdown, и я собираю HTML-страницу R Markdown для некоторых новых пользователей R на моей работе, чтобы дать им интро и пропустить их через простые демонстрации. Показывая такие вещи, как head и tail, он становится грязным и длинным, потому что он печатает каждый вывод один за другим. Я бы хотел их, пока другие разделы моего .Rmd будут разделены на два столбца. В своем исследовании я столкнулся с этим вопросом: 2 Отчет о столбцах в R Markdown - Отредактируйте HTML в рамке данных. Было некоторое обсуждение обходных решений с HTML-кодом, но я не на этом уровне в HTML или CSS. Я попытался включить

<div class="columns-2">
</div>

из официальной документации rmarkdown, но она не имела никакого эффекта

Поскольку я был готов отказаться, был комментарий к вопросу о переполнении стека от @Molx, в котором говорилось, что вы можете разделять столбцы с ***, но не давали никаких дополнительных объяснений. Я попробовал это несколькими способами: я включил *** в середине моего фрагмента кода R, я отделил свои фрагменты кода R и поместил *** между ними. Когда я сделал последнее, *** просто стал горизонтальным правилом и ничего не сделал с столбцами.

Я надеюсь избежать таблиц и CSS, если это возможно. Если у кого есть какие-то мысли по этому поводу, я был бы признателен.

Ответ 1

rmarkdown файл:

#### Put in your css file or directly in rmarkdown

<style>
  .col2 {
    columns: 2 200px;         /* number of columns and width in pixels*/
    -webkit-columns: 2 200px; /* chrome, safari */
    -moz-columns: 2 200px;    /* firefox */
  }
  .col3 {
    columns: 3 100px;
    -webkit-columns: 3 100px;
    -moz-columns: 3 100px;
  }
</style>

#### This section will have three columns

<div class="col3">
**1** one  
**2** two  
**3** three  
**4** four  
**5** five  
**6** six  
**7** seven  
**8** eight  
**9** nine  
</div>

#### This section will have two columns

<div class="col2">
```{r}
head(mtcars)
tail(mtcars)
```
</div>

Дает мне это

введите описание изображения здесь


Edit

Чтобы быть более точным с элементами столбца, вы можете использовать div для каждого набора элементов:

Rmd file

<style>
.column-left{
  float: left;
  width: 33%;
  text-align: left;
}
.column-center{
  display: inline-block;
  width: 33%;
  text-align: center;
}
.column-right{
  float: right;
  width: 33%;
  text-align: right;
}
</style>

#### This section will have three columns

<div class="column-left">
**1** one  
**2** two  
</div>
<div class="column-center">
**3** three  
**4** four  
**5** five  
**6** six  
</div>
<div class="column-right">
**7** seven  
**8** eight  
**9** nine  
</div>

Дает мне

введите описание изображения здесь

Ответ 2

Пользовательское решение css из rawr хорошо, но есть и другой способ, если вы хотите еще больше настроить и полностью исключить css. Поскольку markdown использует макет Bootstrap, мы можем использовать макет сетки Bootstraps для детального стиля:

Единственный недостаток - это несколько дополнительных html-тегов

Пример:

---
title: "test"
author: "Testperson"
output:
  html_document
---

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

## R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.

When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

<div class = "row">
<div class = "col-md-6">
```{r cars,  warning = FALSE, echo = FALSE, dev=c('svg')}
plot(pressure)
```
</div>
<div class = "col-md-6">
```{r pressure, warning = FALSE, echo=FALSE, dev=c('svg')}
plot(pressure)
```
</div>
</div>

Ответ 3

Если вы экспортируете в pdf, вы можете сделать это в заголовке с помощью include.

Без использования CSS файлов я создал двухколоночную среду, используя следующее.

1-е: я создал файл header.tex. header.tex включает в себя следующие операторы:

\usepackage{multicol}
\newcommand{\btwocol}{\begin{multicols}{2}}
\newcommand{\etwocol}{\end{multicols}}

2-й: я поместил следующую команду в заголовок моего документа

---
title: "My title"
author: "My name"
date: "Today"
output:
    beamer_presentation:
        highlight: haddock
    includes:
        in_header: header.tex
        keep_tex: yes
---

Вот пример тела и изображение вывода с двумя столбцами.

***********
\btwocol
'''{r, results="asis"}
print("test")
'''

Here is some text that also is in two column environment.
\etwocol

Now only one column

И вот как выглядит слайд: enter image description here

Ответ 4

Решение CSS для создания нескольких столбцов не позволяет контролировать, где происходит разрыв столбца. Похоже, что разрывы столбцов вставляются автоматически для равномерного распределения контента между столбцами, что не всегда то, что вы можете пожелать.
Символы "***" в методе уценки и rmarkdown вставляют горизонтальный разрыв строки, а не новый столбец.

Помимо формата .Rmd для слайд-презентаций, Rstudio также предоставляет формат представления слайдов .Rpres(Rpresentations). Rpresentations используют немного другой вкус уценки, где символы "***" вставляют новый столбец.

Ниже приведены ссылки на введение в Rpresentations от RStudio:
Два макета столбца
Авторинг R Презентации

Ниже приведены ссылки на вопросы StackOverflow, похожие на ваши:
Два макета колонки в RStudio
Два макета столбцов в уценке

Самый большой недостаток формата Rpresentation заключается в том, что он не поддерживает встроенные блестящие приложения для интерактивной визуализации. Но Rpresentation поддерживает интерактивные веб-графики. Ниже приведен простой пример. Вы можете сохранить его в файл .Rpres, открыть его в RStudio и скомпилировать его в слайд-презентацию HTML. Обратите внимание на интерактивный график webgl на последнем слайде, который вы можете манипулировать мышью.

Simple R Presentation
========================================================
title: "Simple R Presentation"
author: John Doe
date: `r format(Sys.time(), "%m/%d/%Y")`
width: 1900
height: 1000
```{r setup, include=FALSE}
# This is an R setup chunk, containing default options applied to all other chunks
library(knitr)
# This sets the chunk default options
opts_chunk$set(cache=TRUE, collapse=TRUE, error=FALSE, prompt=TRUE)
# This sets the chunk display theme
thm <- knit_theme$get("acid")
knit_theme$set(thm)
# This sets some display options
options(digits=3)
options(width=80)
```


My First Slide
========================================================
Hello World!  
Creating Rpresentations isn't difficult at all!  

<img src="https://community.filemaker.com/servlet/JiveServlet/showImage/2-180549-7694/staples-easy-button.png" width="500" height="500" />


***

The Cauchy-Schwarz Inequality:  

$$
\left( \sum_{k=1}^n a_k b_k \right)^2 
\leq 
\left( \sum_{k=1}^n a_k^2 \right) 
\left( \sum_{k=1}^n b_k^2 \right) 
$$



Slide With R Code Chunk and Output in Two Columns
========================================================

First column contains simple R code that returns the summary of the cars data frame:  
```{r, summ_cars, eval=FALSE, echo=TRUE, results="hold", size="tiny"}
summary(cars)
```
***
Second column contains the output of the code in the first column:  
```{r, summ_cars, eval=TRUE, echo=FALSE, size="tiny"}
```



Slide With Plot
========================================================

First column with R code:  
```{r, plot_cars, eval=TRUE, echo=(-(1:1)), fig.show="hide"}
par(cex.lab=1.5, cex.axis=1.5, cex.main=1.5, cex.sub=1.5)
plot(cars)
```

***

Second column with plot:  
```{r, plot_cars, eval=TRUE, echo=FALSE, fig.width=10, fig.height=8}
```



Slide with Interactive 3d Surface Plot
========================================================

First column with R code:  
```{r, rgl_surf3d, eval=FALSE, echo=TRUE, webgl=TRUE, fig.show="hide"}
library(rgl)  # load rgl
knit_hooks$set(webgl=hook_webgl)
# define function of two variables
foo <- function(x, y) y*sin(x)
# draw 3d surface plot of function
persp3d(x=foo, xlim=c(-5, 5), ylim=c(-5, 5), col="green", axes=FALSE)
```

***

Second column with plot:  
```{r, rgl_surf3d, eval=TRUE, echo=FALSE, webgl=TRUE, fig.width=10, fig.height=8}
```

Ответ 5

Поздний вклад в эту тему, а просто указать на то, что вы можете комбинировать @rawr и @Alison ответы для включения нескольких столбцов секций как для HTML и PDF. Rmarkdown/knitr достаточно умен, чтобы анализировать только соответствующие команды в зависимости от желаемого формата вывода. Я нахожу, что я часто вяжу один и тот же документ в несколько форматов, так что это очень удобно.

Вот полный пример: https://github.com/grantmcdermott/two-col-test