2015-07-31 18 views
21

Jestem bardzo nowy w R Markdown i składam stronę HTML Markdown R dla niektórych nowych użytkowników R w mojej pracy, aby dać im wstęp i przeprowadzić je przez kilka prostych pokazów. Podczas pokazywania takich rzeczy, jak head i tail, kończy się to wyglądem bałaganiarskim i długim, ponieważ wypisuje każde wyjście jedno po drugim. Chciałbym, żeby tak długo, jak inne części mojego .Rmd byłyby podzielone na dwie kolumny. W moich badaniach natrafiłem na to pytanie: 2 Column Report in R Markdown - Render HTML aside Data Frame. Było trochę dyskusji na temat obejścia z kodem HTML, ale nie jestem na tym poziomie w HTML lub CSS. Próbowałem tym2 kolumny Przekrój R Markdown

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

z oficjalnej dokumentacji , ale to nie ma żadnego wpływu

Jak już była gotowa zrezygnować, był komentarz na stosie Pytanie przepełnione przez @Molx, które mówi, że możesz oddzielić kolumny od ***, ale nie wyjaśniłeś więcej. Wypróbowałem to na kilka sposobów: w środku fragmentu kodu R umieściłem kod ***, rozdzieliłem fragmenty kodu R i wstawiłem *** między tymi dwoma. Kiedy zrobiłem to drugie, *** stał się po prostu regułą poziomą i nie zrobił nic z kolumnami.

Mam nadzieję uniknąć tabel i CSS, jeśli to możliwe. Jeśli ktoś ma jakiekolwiek myśli na ten temat, byłbym wdzięczny.

+0

Robi to poprzez kolumn CSS3 jest prawdopodobnie będzie najlepszym rozwiązaniem długoterminowym, być może w połączeniu z kodem wyjściowym zwyczaj knitr wygenerować odpowiednio sklasyfikowane obiektów HTML do którego można zastosować CSS. –

+0

którekolwiek z nich działałoby, więc dobrze byłoby zobaczyć, co zrobiłeś, aby zobaczyć, dlaczego nie działają – rawr

+0

Flexdashboard z htmlwidgets czyni to zadanie banalnym! ps (przykro mi dodawać do dżungli pakietów, ale pomogło mi to wygenerować całkiem przyzwoite kolumny w 15 minut) – markcelo

Odpowiedz

28

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

daje mi ten

enter image description here


Edycja

Aby być bardziej precyzyjny z elementami kolumn, można użyć div dla każdego zestawu elementów:

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

Daje mi

enter image description here

+0

Ta odpowiedź była bardzo pomocna. Teraz zdaję sobie sprawę, że mój sposób myślenia był całkowicie wyłączony. Całkowicie zapomniałem, jak działa CSS. Przyjąłem klasę '" columns-2 "', o której wspomniano w dokumentacji 'rmarkdown' jest ustaloną klasą i nie musiałem pisać żadnego CSS. Twoje rozwiązanie jest świetne! Wciąż jestem ciekawy, czy ktoś ma więcej informacji na temat rozwiązania "***". – bryanR

+0

W jaki sposób wybiera przejście do następnej kolumny? Czy istnieje sposób, aby określić na przykład, że 1 i 2 znajdują się w pierwszej kolumnie, a następnie 3,4,5,6 w drugiej? – RockScience

+0

@RockScience '

**1** one **2** two
**3** three **4** four **5** five **6** six
**7** seven **8** eight **9** nine
' z nowymi liniami zamiast białej przestrzeni – rawr

5

Rozwiązanie CSS do tworzenia wielu kolumn nie pozwala na kontrolowanie, gdzie występują przerwy kolumn. Wygląda na to, że podziały kolumn są wstawiane automatycznie w celu równomiernego rozprowadzania treści między kolumnami, co nie zawsze jest zgodne z oczekiwaniami.
Symbole "***" w Markdown i rmarkdown wstawiają poziomą linię podziału, a nie nową kolumnę.

Oprócz formatu .Rmd dla prezentacji slajdów, Rstudio udostępnia również format prezentacji slajdów (Rpresentations). Rprezentacje używają nieco innego smaku przeceny, gdzie symbole "***" wstawiają nową kolumnę.

Poniżej znajdują się linki do wprowadzenia do Rpresentations przez RStudio:
Two Column Layouts
Authoring R Presentations

Poniżej znajdują się linki do StackOverflow pytania podobne do Ciebie:
Two Column Layouts in RStudio
Two Column Layouts in markdown

Największą wadą Format Rpresentation polega na tym, że nie obsługuje wbudowanych błyszczących aplikacji do interaktywnych wizualizacji. Ale Rpresentation obsługuje interaktywne działki internetowe. Poniżej znajduje się prosty przykład. Możesz zapisać go w pliku .Rpres, otworzyć go w RStudio i skompilować do prezentacji slajdów HTML. Zwróć uwagę na interaktywny wątek webgl na ostatnim slajdzie, który możesz manipulować myszą.

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

Niestandardowe rozwiązanie css z rawr jest dobre, ale jest jeszcze inny sposób, jeśli chcesz jeszcze bardziej dostosować i całkowicie uniknąć jawnego css. Od Przecena wykorzystuje Bootstrap DTP możemy wykorzystać układ siłach siatki dla in-szczegółowo stylizacji:

Jedyną wadą jest kilka znaczników html dodatkowych

Przykład:

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

nie wydaje się działać, jeśli chcesz pdf. –

+0

@JanStanstrup no that's correct, ponieważ to jest html i bootstrap, dla pdf są inne sposoby – ErrantBard

3

Jeżeli jesteś eksportując do pdf możesz to zrobić w nagłówku z włączeniami.

Bez używania plików css Utworzyłem środowisko z dwiema kolumnami, używając następujących.

1-ty: Stworzyłem header.tex plików

header.tex includes the following statements: 
    \usepackage{multicol} 
    \newcommand{\btwocol}{\begin{multicols}{2}} 
    \newcommand{\etwocol}{\end{multicols}} 

2nd: umieścić następujące polecenie w moim nagłówku dokumentu

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

Oto przykład z ciała i obraz wyjście z dwiema kolumnami.

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

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

Now only one column 

I tu jest to, co wygląda na suwak jak: Output

+1

Czy możesz pokazać, jak zrobić to wyjście pdf? Nie mogę zmusić go do działania. –

+0

Czy to wszystko, czego potrzebujesz w "header.tex"? Czy są wymagane dodatkowe linie? –