Rmarkdown файл успешно вяжет в PDF, но ошибка при вызове из R

Я написал файл Rmarkdown, который загружает некоторые данные и генерирует классную таблицу kableExtra с некоторыми символами и пользовательскими цветами и линиями, распечатывая ее в формате PDF.

Он прекрасно работает, когда я открываю файл Rmarkdown и вяжу, и выдает именно тот результат, который мне нужен.

Теперь я хотел бы использовать сценарий R, который проходит через несколько различных подмножеств данных, создавая новую таблицу (и отдельный выходной pdf) для каждого. Итак, мне нужно вызвать мой файл.Rmd из файла.R.

Однако, когда я делаю это (используя rmarkdown::render функция), я получаю ошибки, которые не возникают при вязании непосредственно из файла.Rmd.

Ниже приведен полностью функционирующий файл.Rmd, похожий на тот, который я использую с моими реальными данными. Я звоню из второго R-скрипта со строкой rmarkdown::render("table_creator.Rmd", pdf_document(latex_engine = "xelatex")),

Первая ошибка, с которой я сталкиваюсь Error: Functions that produce HTML output found in document targeting latex output., я добавить always_allow_html: yes в заголовок файла.Rmd и попробуйте снова. Непосредственная вязка файла.Rmd снова работает нормально. Вызов его из скрипта.R теперь приводит к ошибке: ! Undefined control sequence. l.94 ...oup\fontsize{16}{18}\selectfont \textcolor [HTML]{ffde71}{$\bullet$}\...

На данный момент я думаю, что рендеринг происходит с какими-то настройками, отличными от тех, которые используются, когда я связываю файл.Rmd напрямую. Как будто он не разбирает полный заголовок из файла.Rmd, но я не уверен. Я в растерянности из-за того, как действовать в данный момент, и буду признателен за любую помощь.

---
title: ""
output:
  pdf_document:
    latex_engine: xelatex
header-includes:
- \usepackage[T1]{fontenc}
- \setmainfont{Helvetica}
- \DeclareTextCommand{\nobreakspace}{TU}{\leavevmode\nobreak\ }
---

```{r, echo=FALSE, message = FALSE, warning = FALSE}
# Packages
suppressMessages(library(kableExtra))
suppressMessages(library(dplyr))

table_info <- data.frame(Symbol = c("$\\bullet$", "$\\blacksquare$",
                                    "$\\blacklozenge$", "x", "+", "$\\bullet$"),
                         Name = letters[1:6],
                         Results = sample(c("good", "bad"), 6, replace = TRUE),
                         FontSize = c(16, 10, 11, 16, 16, 18),
                         Color = c("#ffde71", "#0c0000", "#0c0000", "#0c0000",
                                   "#0c0000", "#cb6f86"))

 ktable <- table_info %>%
     mutate(Symbol = cell_spec(Symbol, color = Color, 
                              font_size = FontSize,
                              escape = FALSE,
                              format = "latex")) %>%
    select(-Color, -FontSize) %>%
    kable(escape = FALSE, align = c("l", "l", "l"),
          booktabs = TRUE) %>%
    row_spec(1:5, hline_after = TRUE) %>%
    row_spec(1:6, color = "gray") %>%
    column_spec(1, "1.5em")

```

```{r, echo=FALSE}
ktable
```

РЕДАКТИРОВАТЬ: Дополнительная информация контекста Вывод sessionInfo ():

sessionInfo () R версия 3.4.3 (2017-11-30) Платформа: x86_64-apple-darwin17.3.0 (64-разрядная версия) Работает под: macOS High Sierra 10.13.1

Продукты матрицы: по умолчанию BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib LAPACK: /System/Library/Frameworks/Accelerate.framework/Versions/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib

языковой стандарт: [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

прикрепленные базовые пакеты: [1] stats graphics grDevices использует базу данных наборов методов

другие прикрепленные пакеты: [1] bindrcpp_0.2 dplyr_0.7.4 kableExtra_0.9.0 rmarkdown_1.9

загружается через пространство имен (и не присоединяется): [1] Rcpp_0.12.15 rstudioapi_0.7 bindr_0.1 knitr_1.20 xml2_1.2.0
[6] magrittr_1.5 hms_0.4.2 rvest_0.3.2 munsell_0.4.3 viridisLite_0.3.0 [11] colorspace_1.3-2 R6_2.2.2 rlang_0.1.6 plyr_1.8.4 stringr_1.2.0
[16] httr_1.3.1 tools_3.4.3 htmltools_0.3.6 yaml_2.1.18 assertthat_0.2.0 [21] rprojroot_1.3-2 digest_0.6.15 tibble_1.4.2 readr_1.1.1 glue_1.2.0
[26] оценивать_0.10.1 stringi_1.1.6 compiler_3.4.3 pillar_1.1.0 scale_0.5.0
[31] backports_1.1.2 pkgconfig_2.0.1

1 ответ

Я возвращаюсь к этому, так как у меня тоже была очень похожая проблема. Проблема заключалась в том, что я мог вручную связать PDF-файл, но как только я сделал это с помощью скрипта в R, я получил Error in xml_children(x)[[search]] : subscript out of boundsошибка.

Я смог точно определить, что это происходило из-за того, что все внутри kableпроизводства, но после удаления row_spec()звонок, затем меня встретил error: Functions that produce HTML output found in document targeting latex output.ошибка.

Странно было то, что это произошло только в определенной ветке моего проекта, а не в основной ветке. Но возврат к основной ветке не решил проблему. Перезапуск R сделал. Дальнейшее усугубление проблемы заключалось в том, что если я запускал R в основной ветке, а затем переключался на ветку разработки, но не переустанавливал все автоматически, ошибка не появлялась. Это указывало на то, что ошибка крылась где-то в новых скриптах ветки разработки.

Так что я сделал sessionInfo()вызовите загрузку R через основную ветку, а затем ветку разработки и обнаружил, что в одном из моих новых сценариев у меня был дополнительный, который загружался после того, как были введены все остальные пакеты (включая уже вызов). По какой-то странной причине этот дополнительный вызов также вводил и два пакета, которых изначально не было в исходном пакете. kableExtraвызов.

Как только дополнительный library(kableExtra)был удален, проблема была решена, и два дополнительных пакета virisdisLiteа также webshotбольше не звонили и больше не было проблем с render()в пдф.

Другие вопросы по тегам