Добавление списка дополнительных зависимостей в YAML с использованием дефисов в файле RMD? - PullRequest
0 голосов
/ 27 января 2020

Мне дали следующий YAML в качестве шаблона RMD для использования в курсе:

---
title: "Chapter 1"
author: 
output:
  pdf_document:
    extra_dependencies:
    - geometry
    - multicol
    - multirow
  html_document:
    df_print: paged
---

Однако, согласно https://rmarkdown.rstudio.com/docs/reference/pdf_document.html, следует использовать символьный вектор для ключа "extra_dependencies", так почему же список дефисов разрешен?

Я не вижу никакой документации или объяснения этому, ресурсы, объясняющие это, приветствуются!

1 Ответ

1 голос
/ 27 января 2020

Необходимость extra_dependencies в качестве символьного вектора - это вещь R. То, что у вас есть выше, это не R, это YAML, что отличается. Если вы увидите, что R получает при анализе этого заголовка, вы увидите

yaml::yaml.load(string='
title: "Chapter 1"
author: 
output:
  pdf_document:
    extra_dependencies:
    - geometry
    - multicol
    - multirow
  html_document:
    df_print: paged')

# $title
# [1] "Chapter 1"
# $author
# NULL
# $output
# $output$pdf_document
# $output$pdf_document$extra_dependencies
# [1] "geometry" "multicol" "multirow"
# $output$html_document
# $output$html_document$df_print
# [1] "paged"

, где вы можете видеть, что встроенный $output$pdf_document$extra_dependencies действительно является character вектором.


Из текущего YAML spe c, раздел 3.1.1 определяет

... последовательность соответствует массиву Perl и Python список ...

(который, по-моему, аналогичен вектору R), а в разделе 2.1 , пример 2.1 («Последовательность скаляров») демонстрирует последовательность как

- Mark McGwire
- Sammy Sosa
- Ken Griffey

, что означает, что последовательность в yaml (которая является списком в python и вектором в R) кодируется как маркированный список (с дополнительным отступом) с использованием дефисов для каждый элемент.

Напомним, что для R требуется вектор character для функции pdf_document. Заголовок в документах R-markdown - это не R, это YAML, поэтому вопрос состоит в том, "как закодировать опции в заголовке yaml, чтобы R в конечном итоге воспринимал его как вектор строк" . Вот как в виде списка с отступом используются дефисы для идентификации каждого элемента.

...