R markdown - форматируемая таблица с кабелем в l oop - lapply - PullRequest
0 голосов
/ 03 августа 2020

Я наткнулся на проблему, когда хочу, чтобы в R markdown были и выходные данные kable, и таблицы форматирования. Используя этот пост, я создал структуру для печати двух форматируемых наборов данных один за другим с помощью lapply. Код ниже работает точно так, как я хотел

do.call(div,
        invisible(lapply(1:3, function(i) {
          
          obj1 <- div(paste("Text", i, "goes here. \n"),
                      show_plot(print(get_format_table(df))))
          obj2 <- div(paste("Text", i, "goes here. \n"),
                      show_plot(print(get_format_table(df1))))
          
          
          list(obj1, obj2)
          
        }

, давая результат

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

Но проблема началась с kable стол. Без переноса print он дает текст html в документе

foo1 <- function(data, i) {
  knitr::kable(data, caption = paste("Text", i, "goes here."), "html") %>%
             kableExtra::kable_styling(.)
  
}

do.call(div,
  invisible(lapply(1:3, function(i) {
    
    obj1 <- div(paste("Text", i, "goes here. \n"),
        show_plot(print(get_format_table(df))))
    obj2 <- div(paste("Text", i, "goes here. \n"),
        show_plot(print(get_format_table(df1))))
    
    
    list(foo1(df, i), obj1, obj2)
  
  }
  ))
)

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

Когда я оборачиваю print на kable, он печатает два раза даже после использования invisible.

foo1 <- function(data, i) {
  knitr::kable(data, caption = paste("Text", i, "goes here."), "html") %>%
             kableExtra::kable_styling(.)
  
}
do.call(div,
  invisible(lapply(1:3, function(i) {
    
    obj1 <- div(paste("Text", i, "goes here. \n"),
        show_plot(print(get_format_table(df))))
    obj2 <- div(paste("Text", i, "goes here. \n"),
        show_plot(print(get_format_table(df1))))
    
    
    list(print(foo1(df, i)), obj1, obj2)
  
  }
  ))
)

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

В идеале он должен печатать только это (в порядке то есть Text1 kable plot, Text1 formattable plot, Text1 formattable plot2, Text2 kable plot, Text2 formattable plot, Text2 formattable plot2, ...

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

Кто-нибудь знает, как исправить код. Я вставляю полный код ниже

---
title: "testing"
author: "xyz"
date: "30/07/2020"
output: html_document
---

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



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

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

df1 <- data.frame(
  id = 1:3,
  name = c("Hal", "Bal", "Sal"),
  test1_score = c(24, 31, 32)
)

```



```{r create_functions, echo=FALSE}

get_format_table <- function(data) {
  return(formattable::formattable(data, list(test1_score = color_bar("pink"))))
  
  
}
show_plot <- function(plot_object) {
  div(style="margin:auto;text-align:center", plot_object)
}


foo1 <- function(data, i) {
  knitr::kable(data, caption = paste("Text", i, "goes here."), "html") %>%
             kableExtra::kable_styling(.)
  
}

```

```{r output, echo = FALSE, include = TRUE, results = 'asis'}

do.call(div,
  invisible(lapply(1:3, function(i) {
    
    obj1 <- div(paste("Text", i, "goes here. \n"),
        show_plot(print(get_format_table(df))))
    obj2 <- div(paste("Text", i, "goes here. \n"),
        show_plot(print(get_format_table(df1))))
    
    
    list(print(foo1(df, i)), obj1, obj2)
  
  }
  ))
)


```

К сожалению, for циклы не работают с таблицей форматирования и lapply дублируют печать для kable

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...