Вывод латекса Rmarkdown: проблема с sapply - PullRequest
0 голосов
/ 09 июля 2020

См. reprex1 и reprex2 ниже. lapply выполняется, но с sapply в начало строки 87 в файле .tex добавлен ", что нарушает его.

Идеи?

---
title: "reprex"
output:
  pdf_document:
    latex_engine: xelatex
editor_options: 
  chunk_output_type: console
---
{r reprex1, echo=FALSE, warning=FALSE, message=FALSE, results='asis'}

library(tidyverse)
library(kableExtra)

species = c("Human", "Droid")

lapply(species, function(x){
  
  starwars %>%
    select(name, birth_year) %>%
    kable() %>%
  kable_styling(fixed_thead = TRUE, latex_options = c("striped", "scale_down"))%>%
  row_spec(0, bold = TRUE)
})

{r reprex2, echo=FALSE, warning=FALSE, message=FALSE, results='asis'}

library(tidyverse)
library(kableExtra)

species = c("Human", "Droid")

sapply(species, function(x){
  
  starwars %>%
    select(name, birth_year) %>%
    kable() %>%
  kable_styling(fixed_thead = TRUE, latex_options = c("striped", "scale_down"))%>%
  row_spec(0, bold = TRUE)
})

1 Ответ

0 голосов
/ 09 июля 2020

Во-первых, я думаю, вы могли бы добавить в свою функцию строку, которая действительно что-то делает с переменной x, например, фильтрует, иначе вы просто возвращаете дважды один и тот же результат.

sapply(x, f, simplify = FALSE, USE.NAMES = FALSE) is то же, что и lapply(x, f), поэтому вы можете сравнить вывод оператора sapply ниже с simplify = TRUE vs. simplify = FALSE:

library(tidyverse)
library(kableExtra)

species = c("Human", "Droid")

str(sapply(species, function(x){
    starwars %>%
        dplyr::filter(species == x) %>%
        select(name, birth_year) %>%
        kable() %>%
        kable_styling(fixed_thead = TRUE, latex_options = c("striped", "scale_down")) %>%
        row_spec(0, bold = TRUE)
}, simplify = FALSE)[[1]])
#>  'kableExtra' chr "<table class=\"table\" style=\"margin-left: auto; margin-right: auto;\">\n <thead>\n  <tr>\n   <th style=\"text"| __truncated__
#>  - attr(*, "format")= chr "html"

str(sapply(species, function(x){
    starwars %>%
        dplyr::filter(species == x) %>%
        select(name, birth_year) %>%
        kable() %>%
        kable_styling(fixed_thead = TRUE, latex_options = c("striped", "scale_down")) %>%
        row_spec(0, bold = TRUE)
}, simplify = TRUE)[[1]])
#>  chr "<table class=\"table\" style=\"margin-left: auto; margin-right: auto;\">\n <thead>\n  <tr>\n   <th style=\"text"| __truncated__

Создано 9 июля 2020 г. пакет REPEX (v0.3.0) lapply возвращает список (с классом c("kableExtra", "knitr_kable") с атрибутом attr(*, "format")= chr "html")), а sapply возвращает вектор символов с attr(*, "names")= chr "Human".

...