簡體   English   中英

將文件中的html表輸入R Markdown,編織到Word?

[英]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_trimmagick包來修剪圖像。 此外,您可能需要創建一個 Word 模板

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM