2016-12-08 8 views
2

Je souhaite imprimer une série de textes et de tableaux formatés (c'est-à-dire le formatable) dans RMarkdown. Je veux la sortie apparaisse comme:Les tables formatables RMarkdown dans do.call() et apply() apparaissent dans le mauvais ordre

text 1 
formattable table 1 
text 2 
formattable table 2 
text 3 
formattable table 3 

Since formattable tables don't appear when using a for loop, j'utilise le RMarkdown formattable example loop, qui utilise une fonction d'emballage, do.call() et lapply() au lieu d'une boucle.

est ici une version allégée de cet exemple qui démontre la question que je vais avoir:

--- 
title: "formattable example loop" 
output: html_document 
--- 

```{r setup, echo = FALSE} 
library(formattable) 
library(htmltools) 

df <- data.frame(
    id = 1:10, 
    name = c("Bob", "Ashley", "James", "David", "Jenny", 
    "Hans", "Leo", "John", "Emily", "Lee"), 
    test1_score = c(8.9, 9.5, 9.6, 8.9, 9.1, 9.3, 9.3, 9.9, 8.5, 8.6) 
) 

show_plot <- function(plot_object) { 
    div(style="margin:auto;text-align:center", plot_object) 
} 
``` 

```{r, results = 'asis', echo = FALSE} 
### This is where I'm having the problem 
do.call(div, lapply(1:3, function(i) { 

cat("Text", i, "goes here. \n") 
show_plot(print(formattable(df, list(
    test1_score = color_bar("pink") 

)))) 

})) 
``` 

Depuis les impressions de la fonction « i texte ici », puis imprime la table formattable, je pensais que le résultat Le document apparaîtrait comme ci-dessus (texte1 et tableau1, puis texte2 et tableau 2, puis texte3 et tableau 3).

Cependant, il est dans l'ordre et text1 text2 et text3, puis Table1 et Table2 et table3, comme ceci:

enter image description here

Comment puis-je obtenir l'ordre désiré de la production?

Répondre

3

Vous pouvez utiliser paste qui renvoie le texte au lieu de cat qui imprime, et inclure le texte et le tableau dans un div:

do.call(div, lapply(1:3, function(i) { 
    div(paste("Text", i, "goes here. \n"), 
     show_plot(print(formattable(df, list(test1_score = color_bar("pink")))))) 
})) 
+0

Merci, cela fonctionne. Qu'est-ce que div dans 'do.call (div, ....' et div dans 'div (coller (" Test ", je, ....' faire exactement? – hoggue

+0

'div' contient juste le texte dans'

'qui est une instruction de mise en page HTML. Jetez un coup d'oeil à cette page (http://www.w3schools.com/tags/tag_div.asp) – HubertL