我正在使用R Markdown文件,我们需要能够将其同时编织为pdf和Word(对于共同作者)。我们还在stargazer
中生成了回归表,由于数据的大小,它们分别计算,并创建了两个文件:regression_table.tex和gression_table.html。
编织成pdf时,我可以使用乳胶命令\input
轻松地将表格添加到R Markdown。
\input{"regression_table.tex"}
但是,要编织到Word,我无法为HTML文件找到与\input
相同的简单名称。一种选择是在Word中手动插入html表文件,它可以作为低技术含量的备份选项正常工作。另一部分解决方案使用a related question中的修改代码。使用下面的代码块,我可以编织到html,然后将html文档导入到Word。这样可以保持表格格式,但其他格式(如标题和数字)会弄乱。
```{r echo = FALSE, results = 'asis'}
tmp <- paste(readLines(here("regression_table.html")), collapse="\n")
cat(tmp)
```
文件中的html表是否有一个与\input
的简单等效项,可以很好地编织到Word?
答案 0 :(得分:1)
这不是理想的解决方案,但使用webshot
包,可以很容易地将html文件转换为图像文件,然后可以使用knitr::include_graphics
将该图像文件轻松导入R Markdown。这种方法的三个优点是:(1)自动运行; (2)保留格式良好; (3)它可以与其他制表包或任何外部html文件(或网页)一起使用。另外,我在顶部添加了一些代码,因此Rmd会根据我要编织为pdf还是word来自动合并正确的外部文件(.tex或.html)。
```{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创建的图像用空格填充。如果居中很重要,则需要使用cliprect
中的webshot()
选项或使用magick
中的magick::image_trim
包之类的图像来修剪图像。另外,您可能需要create a Word template。