web-dev-qa-db-fra.com

Section de 2 colonnes dans R Markdown

Je suis très nouveau chez R Markdown et je crée une page HTML R Markdown pour certains nouveaux utilisateurs de R dans mon travail pour leur donner une introduction et les guider à travers quelques démos simples. Tout en montrant des choses comme head et tail, cela finit par paraître désordonné et long car il imprime chaque sortie l'une après l'autre. Je les voudrais tant que d'autres sections de mon .Rmd soient divisées en deux colonnes. Dans mes recherches, je suis tombé sur cette question: Rapport à 2 colonnes dans R Markdown - Rendu HTML à côté du cadre de données . Il y a eu quelques discussions sur les solutions de contournement avec le code HTML, mais je ne suis pas à ce niveau en HTML ou CSS. J'ai essayé d'inclure

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

de la documentation officielle rmarkdown, mais cela n'a eu aucun effet

Comme j'étais prêt à abandonner, il y avait un commentaire sur la question Stack Overflow par @Molx disant que vous pouvez séparer les colonnes avec ***, mais n'a donné aucune autre explication. Je l'ai essayé de plusieurs façons: j'ai inclus le *** au milieu de mon bloc de code R, j'ai séparé mes morceaux de code R et mis le *** entre les deux. Quand j'ai fait ce dernier, le *** est simplement devenu une règle horizontale et n'a rien fait avec les colonnes.

J'espère éviter les tables et CSS si possible. Si quelqu'un a des idées à ce sujet, je l'apprécierais.

38
bryanR

fichier 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>

Me donne ça

enter image description here


Modifier

Pour être plus précis avec les éléments de colonne, vous pouvez utiliser un div pour chaque ensemble d'éléments:

Fichier rmd

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

Donne moi

enter image description here

48
rawr

La solution css personnalisée de rawr est bonne, mais il existe un autre moyen si vous souhaitez encore plus de personnalisation et éviter complètement les css explicites. Étant donné que le démarquage utilise la disposition Bootstrap, nous pouvons utiliser la disposition de la grille Bootstraps pour un style détaillé:

Le seul inconvénient est quelques balises html supplémentaires

Exemple:

---
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>
15
ErrantBard

Si vous exportez au format PDF, vous pouvez le faire dans l'en-tête avec des inclusions.

Sans utiliser de fichiers css, j'ai créé un environnement à deux colonnes en utilisant ce qui suit.

1er: j'ai créé le fichier header.tex. header.tex comprend les déclarations suivantes:

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

2ème: j'ai mis la commande suivante dans mon en-tête de document

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

Voici un exemple du corps et une image de la sortie avec deux colonnes.

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

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

Now only one column

Et voici à quoi ressemble la diapositive: enter image description here

7
Alison Shelton

La solution CSS pour créer plusieurs colonnes ne permet pas de contrôler où les sauts de colonne se produisent. Il semble que les sauts de colonne soient insérés automatiquement pour distribuer le contenu uniformément entre les colonnes, ce qui n'est pas toujours ce que vous souhaitez.
Les symboles "***" dans markdown et rmarkdown insèrent un saut de ligne horizontal, pas une nouvelle colonne.

Outre le format .Rmd pour les présentations de diapositives, Rstudio fournit également un format de présentation de diapositives .Rpres (Rpresentations). Les représentations utilisent une saveur légèrement différente de démarque, où les symboles "***" insèrent une nouvelle colonne.

Vous trouverez ci-dessous des liens vers une introduction à Rpresentations par RStudio:
Disposition à deux colonnes
Création de présentations R

Vous trouverez ci-dessous des liens vers des questions StackOverflow similaires aux vôtres:
Disposition à deux colonnes dans RStudio
deux dispositions de colonne dans la démarque

Le plus gros inconvénient du format Rpresentation est qu'il ne prend pas en charge les applications brillantes intégrées pour les visualisations interactives. Mais Rpresentation prend en charge les tracés Webgl interactifs. Voici un exemple simple. Vous pouvez l'enregistrer dans un fichier .Rpres, l'ouvrir dans RStudio et le compiler dans une présentation de diapositives HTML. Notez l'intrigue webgl interactive dans la dernière diapositive, que vous pouvez manipuler avec votre souris.

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
algoquant

Une contribution tardive à ce fil, mais juste pour souligner que vous pouvez combiner les réponses de @rawr et @ Alison pour activer les sections multicolonnes pour à la fois HTML et PDF. Rmarkdown/knitr est suffisamment intelligent pour analyser uniquement les commandes pertinentes en fonction du format de sortie souhaité. Je trouve que je tricote souvent le même document dans plusieurs formats, c'est donc très pratique.

Voici un exemple complet: https://github.com/grantmcdermott/two-col-test

4
Grant