使用带有Rmarkdown的texreg来获取word文档

时间:2016-05-07 13:03:22

标签: r ms-word r-markdown texreg

当我使用Sweave时,我喜欢texreg包,以便将漂亮的打印模型结果变成乳胶。我移动到RMarkdown生成word文档,因为我无法回收旧的texreg代码,所以我遇到了问题。

是否有任何方法可以修改此块以在Word中输出漂亮的打印输出?

注意:upgradesngr.fxplm包对象。

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

1 个答案:

答案 0 :(得分:4)

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

htmlreg包中的texreg函数创建HTML表(而不是Markdown表)。在适当的Markdown文档中,可以嵌入HTML,因为这是Markdown规范的一部分。例如,您可以在Markdown文档中编写以下代码,它将被转换为包含两列的表:

<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编辑器/查看器,则会产生以下结果:

upper left upper right
lower left lower right

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

但是,如果您尝试创建Word文档,则该文档不会被解释为(正确的)Markdown代码(从某种意义上说,无法嵌入HTML),即,您只能垂直列出所有单元格,但不会格式化作为一张桌子。换句话说,使用“Knit to Word”功能不会解释嵌入在Markdown中的HTML块。结果将如下所示:

upper left
upper right
lower left
lower right

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

现在,这就是为什么“Knit to Word”功能不会将htmlreg正确创建的表格嵌入到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表:

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

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

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

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

最后,请注意您可以使用变通方法创建Word文档。应该可以创建HTML文档,然后在MS Word中打开或导入它。至少可以将htmlreg的输出保存到文件中并在Word中打开,因此我假设对于使用knitr创建的较长HTML文档应该保留相同的内容。