使用RStudio和Knitr使用stargazer

27

我在使用RStudio的knitr时遇到了使用stargazer输出结果的问题。例如,我将下面的代码粘贴到.Rmd文件中,然后单击Knit HTML。方括号 [ 和 ] 之间的第一个块会呈现为方程式。第二个块来自stargazer。它仍然是代码。当我将第二个块(少掉方括号)粘贴到Sweave文件中,然后单击编译为PDF时,代码会呈现为表格。我已经安装了MikTex和Stargazer的3.0版本。

答案"inserting stargazer or xable table into knitr document"对我在Sweave文件(Rnw)中单击编译PDF时有效。但在.Rmd文件中,单击Knit HTML时无法呈现tex。

我该如何将stargazer的输出结果放入Rmd文件中,以便Knit HTML能够将latex代码转换为表格?(我是Latex的新手,不确定哪些代码可以删除,因此很抱歉造成篇幅较长。)

\[
\begin{aligned}
\dot{x} & = \sigma(y-x) \\
\dot{y} & = \rho x - y - xz \\
\dot{z} & = -\beta z + xy
\end{aligned}
\]

\[
\documentclass{article}

\begin{document}


% Table created by StarGazer v.3.0.1 by Marek Hlavac, Harvard University. E-mail: hlavac at fas.harvard.edu
% Date and time: Sun, Feb 03, 2013 - 11:34:52 AM
\begin{table}[htb] \centering 
  \caption{} 
  \label{} 
\footnotesize 

\begin{tabular}{@{\extracolsep{5pt}}lc} 
\\[-1.8ex]\hline 
\hline \\[-1.8ex] 
 & \multicolumn{1}{c}{\textit{Dependent variable:}} \\ 
\cline{2-2} 
\\[-1.8ex] & Rate \\ 
\hline \\[-1.8ex] 
 pole & $0.071^{***}$ \\ 
  & $(0.020)$ \\ 
  & \\ 
 post & $0.095^{***}$ \\ 
  & $(0.019)$ \\ 
  & \\ 
 Constant & $-5.784^{***}$ \\ 
  & $(1.667)$ \\ 
  & \\ 
\hline \\[-1.8ex] 
Observations & $46$ \\ 
Residual Std. Error & $2.378 (df = 43)$ \\ 
\hline 
\hline \\[-1.8ex] 
\textit{Note:}  & \multicolumn{1}{r}{$^{*}$p$<$0.1; $^{**}$p$<$0.05; $^{***}$p$<$0.01} \\ 
\normalsize 
\end{tabular} 
\end{table} 

\end{document}
\]

2
LaTeX表格在Markdown/HTML中不起作用。 RStudio仅支持数学公式。表格有自己的语法(点击“MD”按钮),问题是“stargazer”是否支持此语法。 我只知道“xtable”可以生成HTML表格。 - Yihui Xie
@Yihui,googleVis包具有HTML表格功能。https://developers.google.com/chart/interactive/docs/gallery/table - Roman Luštrik
请问您能否更具体地说明您想要实现什么?最重要的是,您需要HTML文件作为最终输出,还是需要PDF或Word,并将HTML作为中间步骤? - Maxim.K
如果您不必使用stargazer,那么texregknitr和HTML / Markdown兼容。请参阅http://cran.r-project.org/web/packages/texreg/vignettes/jss1020.pdf的第5.6节。 - Philip Leifeld
@Isaiah 我认为你应该将采纳答案更改为第二个答案。 - Bastiaan Quast
5个回答

52

使用下面的代码,您将获得一个可用版本

```{r, results='asis'}
stargazer(model)
```

当转换为PDF时,以下代码对于stargazer 4.0完美地工作:

```{r, results='asis'}
stargazer(model, header=FALSE, type='latex')
```

这个很好用,但是stargazer自动生成的LaTeX注释在我的PDF输出中无法隐藏:%Table created by stargazer v.5... 你怎么防止这种情况发生? - Alex P. Miller
5
"header=FALSE" 会为我处理它。不确定你是否错过了这个选项。 - Junchen
想知道@Junchen或其他人是否能够在函数中使用stargazer。类似这样的东西: fits <- lapply(unique(temp$measure2), function(z) stargazer( lm(value~groupID, data=dt2[J(z), ], y=TRUE), header=FALSE,type="html" ) ) fits - Ben

13

由于这个话题有点陈旧,我假设问题是如何与knitr一起使用stargazer,而不是将stargazer对象转换为HTML。

作为stargazer的忠实粉丝,我想出了以下工作流程:

  1. 在.Rmd文件中编写代码。
  2. 将其编织成.md文件。在生成的markdown文件中,stargazer表仍然保留为LaTeX代码。
  3. 使用pandoc将markdown文件转换为PDF。Pandoc将LaTeX代码转换为正确的表格。或者,可以使用带有knitr插件的LyX以漂亮的PDF格式输出stargazer表。

如果想在MS Word中使用stargazer表,则我发现最好的方法是使用LaTeX2RTF。虽然顶部的单元格略微失真,但修复它只需要删除一个错误的空单元格。对于其余的表格保持不变,并且可以粘贴/导入到Word中。

这两种策略有助于在LaTeX之外使用stargazer。希望能帮到你。


1
你有没有成功地渲染方程式呢?这是我用这个解决方法无法实现的唯一一件事。 - altabq
我也无法正确获取日期时间,显示为 POSIX 整数。 - eri0o

6
除了之前的答案外,可能更简单的解决方案是让stargazer输出HTML代码,这样当Rmd文件转换为HTML时,就会创建一个表格而不是TeX代码。我认为stargazer函数现在可以通过设置type='html'直接导出到HTML。
例如,假设你拟合了模型lm1,则可以在Rmd文件中使用以下代码: stargazer(lm1, type='html') 无论您最终的输出是HTML还是PDF,这都适用。

5

回到这个问题。

我想使用相同的markdown文件,在RStudio中通过knitr生成html和pdf输出。也就是说,在RStudio中,我想按下knit按钮,然后可以选择将其编织成HTML输出或PDF输出。目前,我对编织成Word/OpenOffice文档没有太大兴趣。

我使用了Jake Russ的非常有用的stargazer cheatsheet。这个文件涵盖了stargazer的大部分功能。它是一个R Markdown文件,其中块选项设置为 results='asis', 以产生stargazer输出。

stargazer命令本身有一个参数'type'。默认值为 type='latex' 在Jake Russ的cheatsheet中,他使用了 type='html' 来制作网页。

如果您尝试将其编织成pdf,这根本行不通。表格会变成长列表,每行一个单元格,没有格式,并占据许多页面,没有格式。

我能做出的最小更改,以便在RStudio中生成漂亮的pdf,就是全局替换所有

type='html'

使用

type='latex'

注意,这两个内容都出现在文档的文本和stargazer命令中,因此需要谨慎处理!

这很有效!据我所见,PDF文件是网页的忠实复制品,这正是我想要的。

如果我离开,尝试编织OpenOffice文档

type='latex'

每个输出中的表格都会被替换为此文本:-
% Table created by stargazer v.5.2 by Marek Hlavac, Harvard University. E-mail: hlavac at fas.harvard.edu % Date and time: Tue, Sep 01, 2015 - 22:22:29

如果我恢复了
type='html'

然后每个表格都会被写成一页的一行一个单元格,没有任何格式!

“全局替换”...我想用一行代码替换“type”,而不是每个表格都单独替换。 - ahorn

2
Stargazer 很棒,但是已经有一段时间没有更新了,因此并没有专门与 knitr 或 RStudio 的交互式查看选项进行设计。缺乏交互式查看和自动 html/latex 检测至少会带来两个问题:
  • 这对于期望在 RStudio 中获得易于阅读的行内输出的新用户来说可能特别令人困惑

  • 在更复杂的文档中,当编织大型 html 或 latex 表格需要时间时,这也可能令人沮丧

下面我创建了一个简单的包装器,围绕 stargazer 函数称为 starviewer,它执行以下操作:

  • 检查文档是否正在编织到 latex 或 html
  • 如果文档未被编织到 latex,则输出为文本或 html
  • 在 RStudio 中以交互方式运行时,输出可以作为文本内联显示和/或在 Viewer 窗格中作为 html 显示
关于RStudio的viewer函数rstudioapi::viewer(),请参见:https://rstudio.github.io/rstudio-extensions/pkgdown/rstudioapi/reference/viewer.html 以下四个代码块应该在标准的R markdown文档中工作,并在编织时自动分配正确的类型(latex或html)。它们也应该可以交互式地运行并将输出内联和/或输出到Viewer窗格。
最后,有关将stargazer表自动转换为包括Word(使用html输出的图像)的格式,请参见此解决方案:https://stackoverflow.com/a/63563742/893399
```{r load_packages}
# good to load stargazer for regular usage
library(stargazer)
```

```{r starviewer_function}

# create wrapper around stargazer
starviewer <- function(...) {
  
  # make sure stargazer is available
  require(stargazer)
  
  # assume text output but check for latex or html
  star_format <- "text"
  if(knitr::is_latex_output()) {star_format <- "latex"}
  if(knitr::is_html_output())  {star_format <- "html"}
  
  # if latex, just run stargazer as usual
  if (star_format == "latex") {
    stargazer::stargazer(...)   

  } else {

  # if not latex, run stargazer in text / html (or both)  
    dir <- tempfile()
    dir.create(dir)
    htmlFile <- file.path(dir, "tempfile.html")
    stargazer::stargazer(..., type = star_format, out = htmlFile)
    rstudioapi::viewer(htmlFile)
  }
}

```

```{r run_models}
lm1 <- lm(mpg ~ wt,      data = mtcars )
lm2 <- lm(mpg ~ wt + am, data = mtcars )
```

```{r create_table, results = 'asis'}
starviewer(lm1, lm2)

```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接