为什么用kable_save写一个pdftable会导致htmltable同名的被删除?

Why does using kable_save to write a pdf table cause html tables of the same name to be deleted?

使用 kableExtra::save_kable,我发现保存为 pdf 会导致以前保存的同名 html table 被删除。在这个例子中:

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")

两个 table 现在都已保存。

这给了我一个修复,但我想知道这种行为是否是设计使然的,是否可以在不重新排序代码的情况下对其进行修改,我可能并不总是想这样做。

不修改函数就不能改变行为。当您输入 save_kable HTML 并请求 PDF 输出时,它会写入 HTML 文件(覆盖任何已经存在的文件),将其转换为 PDF,然后删除 HTML ] 文件自行清理。 You can see this looking at the code on Githubunlink是删除文件的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"))
}