微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将文件中的html表输入到R Markdown中,编织成Word?

如何解决将文件中的html表输入到R Markdown中,编织成Word?

我正在使用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?

解决方法

这不是理想的解决方案,但使用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,type   = 'latex',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',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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。