Проблемы между kable и rmarkdown :: render в цикле for - PullRequest
1 голос
/ 30 марта 2020

Я пытаюсь создать несколько отчетов и связать их в pdf в R. У меня есть скрипт, который генерирует фрейм данных, который я хочу связать. Затем у меня есть для l oop, который разбивает данные, соответствующие каждому студенту. Этот цикл выполняет вызов для записной книжки .Rmd, где я указал вызов kable для создания таблицы. Вот пример моего скрипта Come

R:

# Split files ####
student_IDs   <- unique(final_scores$ID)
nStudents     <- length(student_IDs)
student_names <- unique(final_scores$Name)

for (iStudent in 1:nStudents) {

  scores <- filter(final_scores, ID == student_IDs[iStudent]) %>% 
    select(-c(ID, Name))


  rmarkdown::render(envir = new.env(),
                    input         = "grades_handout.Rmd",
                    output_format = "pdf_document",
                    output_file   = paste(student_names[iStudent], student_IDs[iStudent], "assignsubmission_file", student_names[iStudent], "HW3_Grade_",
                                          sep = "_"),
                    output_dir    = file.path(root_dir, "Rubrics"))
}

Rmd:

---
header-includes:
  - \usepackage{booktabs}
  - \usepackage{longtable}
  - \usepackage{array}
  - \usepackage{multirow}
  - \usepackage{wrapfig}
  - \usepackage{float}
  - \usepackage{colortbl}
  - \usepackage{pdflscape}
  - \usepackage{tabu}
  - \usepackage{threeparttable}
  - \usepackage{threeparttablex}
  - \usepackage[normalem]{ulem}
  - \usepackage{makecell}
  - \usepackage{xcolor}
output: pdf_document
classoption: landscape
geometry: margin=2cm
---
\pagenumbering{gobble}


```{r setup, include=F}
library(kableExtra)
library(tidyverse)

```

```{r echo=F, warning=FALSE}
kable(grade, format = "latex", 
      booktabs = T, 
      align = "c") %>%
  column_spec(1:4, width = "6em") %>%
  kable_styling(font_size = 12) %>%
  row_spec(0, align = "c", bold = T)

```

```{r echo=F, warning=F}
kable(scores, format = "latex",
      longtable = T, #linesep = "",
      booktabs = T,
      col.names = c("Q.", "Level I", "Level II", "Level III", "Value",
                    "Correct Answer", "Your Answer",
                    "Points answer", "Points work", "Feedback"),
      align = c("c", "c", "c", "c", "c", "l", "l", "c", "c", "l")) %>%
  kable_styling(latex_options = c("repeat_header", "striped"), full_width = F) %>%
  column_spec(6:7, width = "15em") %>%
  column_spec(1:4, width = "1.5em") %>%
  column_spec(5, width = "1.5em") %>%
  column_spec(8:9, width = "3em") %>%
  column_spec(10, width = "15em") %>%
  row_spec(0, align = "c")


```

Если я нажму «вязать», процесс будет работать без сбоев, и документ готов. Однако при вызове из скрипта с помощью render () некоторые параметры, выбранные в kable, вызывают сбои во время рендеринга. Использование опции "striped" внутри вызова kable_styling () приводит к следующему выводу:

! Misplaced \noalign.
\rowcolor ->\noalign 
                     {\ifnum 0=`}\fi \global \let \CT@do@color \CT@@do@color...
l.113 \rowcolor
               {gray!6}  Incorrect coefficient for beta(b).\\ 

Я понимаю, что это, вероятно, связано с тем, что ширина столбца делает некоторые ячейки несколькими строками, но исправьте меня, если Я не прав. Дело в том, что я не понимаю, в чем разница при нажатии кнопки «Вязать» по сравнению с использованием rmarkdown :: render ().

Если кто-нибудь из вас мог бы указать мне, как включить отсутствует информация в заголовке YAML (если это необходимо, я должен был сделать это с пакетами, которые использует kable, в противном случае появились другие ошибки) или как дать больше информации для render (), чтобы он мог работать правильно.

Бест, Эдуардо

...