2016-12-08 3 views
2

Я хотел бы напечатать серию текстов и готовых таблиц (т. Е. Упакованный пакет) в RMarkdown. Я хотел бы, чтобы выход появиться как:RMarkdown formattable tables внутри do.call() и apply() отображаются неверно.

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, я использую RMarkdown formattable example loop, которая использует функцию-оболочку, do.call() и lapply() вместо того, чтобы для цикла.

Вот сократившийся вариант этого примера, который демонстрирует меня вопрос:

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

)))) 

})) 
``` 

Поскольку функция выводит «Текст я здесь иду», затем печатает formattable таблицы, я думал, что в результате документ будет выглядеть так, как указано выше (text1 и table1, затем текст2 и таблица 2, затем текст3 и таблица 3).

Однако, это в text1 порядке и text2 и Text3, затем table1 и table2 и Table3, например, так:

enter image description here

Как я могу достичь желаемого порядка вывода?

ответ

3

Вы можете использовать paste, который возвращает текст вместо cat, который печатает его, и включают в себя текст и таблицы в пределах 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

Спасибо, это работает. Что делать div в 'do.call (div, ....' и div в 'div (paste (" Test ", i, ....' точно? – hoggue

+0

'div' просто заключает в текст'

', который это инструкция компоновки HTML. Посмотрите [здесь] (http://www.w3schools.com/tags/tag_div.asp) – HubertL

 Смежные вопросы

  • Нет связанных вопросов^_^