Почему использование kable_save для записи таблицы pdf приводит к удалению таблиц html с тем же именем?

Используя kableExtra :: save_kable, я обнаружил, что сохранение в формате pdf приводит к удалению ранее сохраненной таблицы html с тем же именем. В этом примере:

df <- data.frame(a = c(1:4), b = c(5:8))
df <- kableExtra::kable(df)
kableExtra::save_kable(df, file = "table.html")
kableExtra::save_kable(df, file = "table.pdf")

сохраняется только table.pdf.

Однако после смены порядка:

df <- data.frame(a = c(1:4), b = c(5:8))
df <- kableExtra::kable(df)
kableExtra::save_kable(df, file = "table.pdf")
kableExtra::save_kable(df, file = "table.html")

обе таблицы теперь сохранены.

Это дает мне исправление, но мне интересно, является ли такое поведение преднамеренным и можно ли его изменить без изменения порядка кода, что я, возможно, не всегда хочу делать.


person Matt Nolan    schedule 30.01.2019    source источник


Ответы (1)


Поведение нельзя изменить без изменения функции. Когда вы вводите save_kable HTML и запрашиваете вывод PDF, он записывает HTML-файл (перезаписывая все, что уже существует), конвертирует его в PDF, а затем удаляет HTML-файл, чтобы очистить его после себя. Это можно увидеть в Github. (unlink - это команда R для удаления файла).

Несколько вариантов:

  • Отправьте запрос функции с kableExtra и надейтесь, что он откликнется.
  • Измените код самостоятельно. Функция save_kable_latex принимает необязательный аргумент для хранения промежуточного файла .tex, здесь вы можете применить тот же подход.
  • Если вам часто нужны и PDF, и HTML, вы можете написать небольшую функцию-оболочку, которая вызывает эти два в правильном порядке, например,
# (untested)
save_kable_pdf_html = function(..., file) {
  kableExtra::save_kable(..., file = paste0(file, ".pdf"))
  kableExtra::save_kable(df, file = paste0(file, ".html"))
}
person Gregor Thomas    schedule 30.01.2019
comment
Спасибо, это очень помогло. Я отправлю запрос на добавление функции и воспользуюсь обходным путем. - person Matt Nolan; 31.01.2019