使用 texreg 和 Rmarkdown 获取 word 文档

using texreg with Rmarkdown to get word documents

当我使用 Sweave 时,我喜欢 texreg 用于将模型结果漂亮地打印到乳胶中的软件包。我搬到 RMarkdown 来制作 word 文档,但我遇到了问题,因为我无法回收旧的 texreg 代码。

有什么方法可以修改这个块以在 Word 中打印出漂亮的打印输出吗?

注意:upgradesngr.fx 是一个 plm 包对象。

{r summary,echo=FALSE,results='markup'} htmlreg(list(upgradesngr.fx), star.symbol = "\*", center = TRUE, doctype = FALSE)

在下文中,我假设您正在使用 RStudio 创建 Word 文档。我认为这是一个特定于软件的问题。简而言之:编织Word文档时不能嵌入HTML代码。

texreg 包中的 htmlreg 函数创建 HTML tables(不是 Markdown tables)。在适当的 Markdown 文档中,可以嵌入 HTML,因为这是 Markdown 规范的一部分。例如,你可以在你的 Markdown 文档中只写下面的代码,它会被翻译成一个有两列的 table:

<table>
<tr>
<td>upper left</td>
<td>upper right</td>
</tr>
<tr>
<td>lower left</td>
<td>lower right</td>
</tr>
</table>

例如,如果您在 RStudio 中使用 "Knit to HTML" 函数,或者如果您使用任何其他 Markdown editor/viewer,这将产生以下结果:

upper left upper right
lower left lower right

如果您在 RStudio 的 Markdown 文档中尝试此操作并从中创建一个 HTML 文档,它将起作用。请注意,在 RStudio 中使用的 Pandoc 引擎不允许缩进。

但是,如果您尝试创建一个 Word 文档,该文档不会被解释为(正确的)Markdown 代码(在嵌入 HTML 是不可能的意义上),即,您只获得所有单元格垂直列出,但未格式化为 table。换句话说,使用 "Knit to Word" 函数将不会解释嵌入在 Markdown 中的 HTML 块。结果将如下所示:

upper left
upper right
lower left
lower right

您可以在 RStudio 中自己的文档中尝试。

现在,这正是 "Knit to Word" 函数无法将 htmlreg 创建的 table 正确嵌入到 Word 文件中的原因。

这里有一个可以与 "Knit to HTML" 函数一起正常工作的解决方案,因为这个函数似乎可以正确解释 HTML 代码:首先,让我们做一些准备步骤。加载 texreg 包并估计一个简单的线性模型以供说明:

```{R echo = FALSE, include = FALSE}
library("texreg")
ctl <- c(4.17, 5.58, 5.18, 6.11, 4.50, 4.61, 5.17, 4.53, 5.33, 5.14)
trt <- c(4.81, 4.17, 4.41, 3.59, 5.87, 3.83, 6.03, 4.89, 4.32, 4.69)
group <- gl(2, 10, 20, labels = c("Ctl", "Trt"))
weight <- c(ctl, trt)
lm.D9 <- lm(weight ~ group)
```

然后创建一个HTML table如下:

```{r summary,echo = FALSE, results = "asis"}
htmlreg(lm.D9, star.symbol = "\*", center = TRUE, doctype = FALSE, caption = "")
```

注意这里需要results = "asis"。另请注意,htmlreg 函数默认为文档类型生成一行,因为该函数也可用于创建完整的 HTML 文档。我们需要关闭它以使其工作。在您的示例中,您正确地转义了星号。结果将是嵌入 HTML 文档中的适当回归 table。如果您现在使用 "Knit to Word" 函数,这也将包括 table 内容,但就像上面的 HTML 示例一样,它只会将所有 table 单元格列为单独的行并且未正确格式化为 table.

也可以使用RStudio中的"Knit to PDF"功能通过使用LaTeX创建PDF文档。在这种情况下,您显然必须用 LaTeX table 替换 HTML table。为此,请使用以下代码代替上面的代码:

```{r summary, echo = FALSE, results = "asis"}
texreg(lm.D9, star.symbol = "\*", center = FALSE, caption = "")
```

最后,请注意,您可以使用变通方法创建 Word 文档。应该可以创建一个 HTML 文档,然后在 MS Word 中打开或导入它。至少可以将 htmlreg 的输出保存到一个文件中并在 Word 中打开它,所以我认为对于使用 knitr 创建的更长的 HTML 文档应该也是如此。