[英]Input html table from file into R Markdown, knit to Word?
我正在處理一個 R Markdown 文件,我們需要能夠將其編織為 pdf 和 Word(對於共同作者)。 我們也有在stargazer
中生成的回歸表,由於數據的大小,它們被單獨計算並創建了兩個文件:regression_table.tex 和regression_table.html。
編織到 pdf 時,我可以使用乳膠命令\\input
輕松地將表格添加到 R Markdown。
\input{"regression_table.tex"}
但是,要編織到 Word,我一直無法為 html 文件找到與\\input
等價的簡單方法。 一種選擇是在 Word 中手動插入 html 表格文件,這作為一種低技術備份選項工作正常。 另一個部分解決方案使用來自相關問題的修改后的代碼。 使用下面的代碼塊,我可以編織到 html,然后將 html 文檔導入到 Word。 這保持了表格格式,但其他格式,如標題和數字,會變得一團糟。
```{r echo = FALSE, results = 'asis'}
tmp <- paste(readLines(here("regression_table.html")), collapse="\n")
cat(tmp)
```
是否有一個簡單的等效於\\input
的文件中的 html 表,可以很好地編織到 Word?
這不是一個理想的解決方案,但是,使用webshot
包,很容易將 html 文件轉換為圖像文件,然后可以使用knitr::include_graphics
輕松將其導入 R Markdown。 這種方法的三個優點是(1)它自動工作; (2) 格式保存良好; (3) 它可以與其他制表包一起使用,或者就此而言,任何外部 html 文件(或網頁)。 此外,我在頂部添加了一些代碼,以便 Rmd 自動合並正確的外部文件(.tex 或 .html),具體取決於我是編織到 pdf 還是 word。
```{r create_output_logicals, include = FALSE}
# https://stackoverflow.com/questions/62389948/knitris-word-output-to-check-if-the-current-output-type-is-word-just-like
is_word_output <- function(fmt = knitr:::pandoc_to()) {
length(fmt) == 1 && fmt == "docx"
}
# create logical variables that indicate knitting output format
latex_lgl <- knitr::is_latex_output()
html_lgl <- knitr::is_html_output()
word_lgl <- is_word_output()
```
```{r load_packages, include = FALSE}
library(stargazer)
library(webshot)
```
```{r create_table, include = FALSE}
lm1 <- lm(mpg ~ wt, data = mtcars)
lm2 <- lm(mpg ~ wt + cyl, data = mtcars)
stargazer(
lm1, lm2,
type = 'html',
header = FALSE,
out = 'regression_table.html'
)
stargazer(
lm1, lm2,
type = 'latex',
header = FALSE,
out = 'regression_table.tex'
)
```
```{r regression_table_word, echo = FALSE, eval = word_lgl}
webshot(
url = "regression_table.html",
file = "regression_table.png",
zoom = 2 # doubles the resolution
)
knitr::include_graphics("regression_table.png")
```
```{r regression_tables_tex, results = 'asis', echo = FALSE, eval = latex_lgl}
# if not knit to word document, use latex \input for tex tables
# line spacing assumes YAML/header includes: \usepackage{setspace}
# header-includes: |
# \usepackage{setspace}\doublespacing
cat(
'\\singlespacing
\\input{"regression_table.tex"}
\\doublespacing'
)
```
請注意,表格/圖像不會在 Word 中居中。 由 webshot 創建的圖像用空格填充。 如果居中很重要,您需要使用webshot()
的cliprect
選項或使用類似帶有magick::image_trim
的magick
包來修剪圖像。 此外,您可能需要創建一個 Word 模板。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.