使用 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 文档应该也是如此。
当我使用 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 文档应该也是如此。