Выход параметризованного PDF-файла R Markdown с использованием механизма xelatex не удалось скомпилировать при включении ggplot

Я использую R Markdown для массового создания параметризованных отчетов в формате PDF. У меня нет проблем с запуском каждого фрагмента кода и без проблем с созданием одного PDF-файла. Но когда я запускаю функцию lapply() внизу, три (переменная «cut» в наборе данных по бриллиантам имеет пять категорий) PDF-файлов генерируются успешно, но я застрял на четвертом, «Очень хорошо». Вместо этого я получаю сообщения об ошибках:

ЧТО Я ПРОБОВАЛ:

Я переустановил R, RStudio, tinytex и все пакеты, используемые в моем коде. Я определил, что проблема как-то связана с фрагментом кода ggplot — следовательно, все пять PDF-файлов будут успешно сгенерированы, если я исключим этот фрагмент кода.

ОБНОВЛЯТЬ:

  1. Как указано ниже, сбой при запуске функции lapply() вызван пробелом в «Очень хорошо» и, возможно, из-за того, что система Windows не может справиться с пустым пространством в имени пути. Но это не может объяснить, почему код застрял на уровне «Очень хорошо» ТОЛЬКО КОГДА Я ВКЛЮЧАЮ СЮЖЕТ, другими словами, когда я вынимаю фрагмент кода графика, старый код lapply() работает для «Очень хорошо» и других категорий в моем параметр «обрезка». Буду признателен, если кто-нибудь сможет разобраться в этой проблеме.
  2. Некоторые из нас получают новое сообщение об ошибке, касающееся спецификации шрифта. говоря, что для спецификации шрифта требуется «xelatex или laulatex», но я уже определил «latex_engine: xelatex» в своем YAML. Я был бы очень признателен, если бы люди также могли указать на эту проблему или сообщить мне, есть ли какой-либо другой способ изменить шрифт по умолчанию на пользовательский шрифт, такой как «Times New Roman», другим способом обойти эту проблему со спецификацией шрифта?

КОД:

Ниже приведено все, что есть в моем текущем файле «testing_for_stackoverflow.Rmd», что приводит к сообщению об ошибке спецификации шрифта:

---
output: 
  pdf_document:
    latex_engine: xelatex
tables: true
graphics: yes
header-includes:
  - \usepackage{booktabs}
  - \usepackage{fontspec}
  - \usepackage{graphicx}
  - \usepackage{amsmath}
  - \setmainfont{Times New Roman} 
  - \newcommand{\bcenter}{\begin{center}} 
  - \newcommand{\ecenter}{\end{center}}
params:
  cut: "Very Good"
---
\fontsize{10}{12}
\selectfont

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE,
                      warning = FALSE,
                      message = FALSE,
                      fig.align = 'center',
                      include = TRUE,
                      tinytex.tlmgr_update = FALSE,
                      results='asis',
                      fig.dim = c(7, 2.5))
pacman::p_load(tidyverse)

```


## I'm using "diamonds" dataset and cut is my parameter

```{r}
filter(diamonds, cut == params$cut) %>%
  ggplot(aes(color, price)) +
  geom_boxplot()

```

```{r}
kableExtra::kable(head(filter(diamonds, cut == params$cut))) 
```

Запустите этот код в консоли, чтобы создать несколько выходных файлов:

library(tidyverse)
lapply(unique(diamonds$cut), function(i) {
  rmarkdown::render(input = "testing_for_stackoverflow.Rmd",
                    params = list(cut = i),
                    rmarkdown::pdf_document(),
                    output_dir = "out/",
                    output_file = paste0(i, ".pdf"))
})

@stefan Спасибо за советы! Я отредактировал свое сообщение, но часть YAML выглядит странно, когда я вставляю ее как текст. Надеюсь, это все еще имеет смысл, если я сохраню скриншот..

Congli Zhang 04.08.2024 01:48

Вы звоните rmarkdown::render из документа? Это странно. Но в опубликованном вами коде указано, что это параметр speed, а в вашем документе есть параметр с именем cut.

user2554330 04.08.2024 02:56

@user2554330 Спасибо за внимание! Нет, не запускайте окончательный код lapply() в этом файле Rmd. Вырежьте и вставьте его в консоль для запуска. И извините за опечатку — вырезается параметр, а не скорость (скорость — это еще один тестовый документ, в котором я использую набор данных автомобилей).

Congli Zhang 04.08.2024 03:31

Я отредактировал ваш вопрос, чтобы сделать его немного понятнее. Я не получаю ту ошибку, которую вы получили, когда запускаю ее; У меня несколько другое, жалуются на шрифты. Когда я удаляю пакет fontspec и спецификацию шрифта, ошибок не возникает. Но я на Mac; ваша ошибка выглядит как проблема с путями Windows.

user2554330 04.08.2024 10:44

@user2554330 user2554330 Спасибо, что отредактировали мой вопрос! И сейчас у меня та же проблема со спецификацией шрифта — это определенно новая проблема, потому что к тому времени, когда я опубликовал свой вопрос, у меня ее НЕ было. И сообщение об ошибке в спецификации шрифта не имеет смысла, поскольку я определил latex_engine: xelatex в своем YAML. Есть идеи по решению этой проблемы? xelatex важен, потому что в моем отчете мне приходится использовать Time New Roman.

Congli Zhang 04.08.2024 22:26

Я заметил проблему сейчас. При вызове rmarkdown::render() вы указываете output_format как rmarkdown::pdf_document(). Это переопределяет раздел output: в YAML. Если вы хотите указать что-то, как в примере кода, используйте rmarkdown::pdf_document(latex_engine = "xelatex").

user2554330 06.08.2024 21:29
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Четвертый обработанный (или, скорее, необработанный) документ содержит пробел в предполагаемых промежуточных и конечных именах файлов: Very Good.... Судя по сообщению об ошибке, имя файла может быть ошибочно интерпретировано как две отдельные инструкции (undefined control sequence).

Замена заглушки решит проблему? Один подход:

lapply(make.names(unique(diamonds$cut)), ...)

вместо:

lapply(unique(diamonds$cut), ...)

Оцените решение — оно определенно решает проблему, вызванную моим недосмотром проблемы с пробелами в именах файлов, и да, использование make.names() действительно предотвращает появление предыдущего сообщения об ошибке: «! Неопределенная управляющая последовательность». Теперь я могу получить все пять выходных файлов в формате PDF. ОДНАКО для файла «Очень хорошо» и график, и таблица имеют определенные параметры, оси для графика и имена столбцов для таблицы, но не содержат содержимого. Пожалуйста, не тратьте слишком много времени на решение этой проблемы. Я буду использовать переменную токена вместо параметра Cut.

Congli Zhang 04.08.2024 22:25

Более насущная проблема сейчас (см. мой разговор с @user2554330) Я получаю новое сообщение об ошибке, в котором говорится, что «fontspec требует xelatex или laulatex», но я уже определил «latex_engine: xelatex» в своем YAML. В своем отчете мне приходится использовать шрифт Times New Roman, поэтому для меня важна спецификация шрифта. Есть идеи по этому вопросу? Заранее спасибо!

Congli Zhang 04.08.2024 22:25

На форуме TeX может вам повезет, см. е. г. это ответ. В случае с RStudio вы также можете попробовать установить «Инструменты» > «Параметры» > «Глобальные параметры» > «Sweave» > «Набор текста» ... используя значение «XeLaTeX».

I_O 05.08.2024 09:25

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