繁体   English   中英

将 stargazer 与 Rstudio 和 Knitr 一起使用

[英]Using stargazer with Rstudio and Knitr

我正在努力使用 RStudio 在 knitr 中使用 stargazer 输出。 例如,我将下面的代码粘贴到 .Rmd 文件中,然后单击 Knit HTML。 [ 和 ] 之间的第一个块被渲染为方程。 第二块来自观星者。 它仍然是代码。 当我将第二个块 less [ 和 ] 粘贴到 Sweave 文件中,然后单击编译为 PDF 时,代码呈现为表格。 我安装了 MikTex 和 Stargazer 版本 3。

单击编译 PDF 时, 将 stargazer 或 xable 表插入 knitr 文档的答案在 Sweave 文件 (Rnw) 中对我有用。 在 Rmd 文件中,单击 Knit HTML 时不会呈现 tex。

如何将 stargazer 输出放入 Rmd 文件中,以便 Knit HTML 将乳胶代码转换为表格? (我是 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}
\]

使用以下代码,您将获得一个工作版本

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

转换为 pdf 时,以下代码非常适用于 stargazer 4.0:

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

由于该主题已经过时了,我假设手头的问题是以某种方式将 stargazer 与 knitr 一起使用,而不是本质上将 stargazer 对象转换为 HTML。

作为观星者的狂热粉丝,我提出了以下工作流程:

  1. 将我的代码写在 .Rmd 文件中。
  2. 将其编织成 .md。 Stargazer 表在生成的降价文件中保留为 LaTeX 代码。
  3. 使用pandoc将 markdown 文件转换为 PDF。 Pandoc 将 LaTeX 代码翻译成适当的表格。 或者,可以使用带有 knitr 插件的 LyX 以 PDF 格式很好地输出观星表。

如果有人想要 MS Word 中的观星表,我发现最好的方法是使用LaTeX2RTF 虽然最上面的单元格有点扭曲,但修复它是删除错误的空单元格的问题。 其余的表格被保留,可以粘贴/导入到 Word 中。

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

除了前面的答案,也许作为一个更简单的解决方案,stargazer 可以在 html 代码中输出表格,这样当 Rmd 文件被编织成 html 时,会创建一个表格而不是 tex 代码。 我相信stargazer功能现在可以通过设置type = 'html'直接导出到 html 。

例如,给定模型拟合lm1 ,您将在 Rmd 文件中使用以下代码:

stargazer(lm1, type = 'html')

无论您希望最终输出是 html 还是 pdf,这都有效。

回到这个问题。

我想使用相同的降价文件在带有 knitr 的 RStudio 中生成 html 和 pdf 输出。 也就是说,在 RStudio 中,我想按下 knit 按钮,并可以选择编织 HTMl 输出或 pdf 输出。 目前,我对编写 word/OpenOffice 文档没有太大兴趣。

我使用了来自 Jake Russ 的非常有用的观星者备忘单。 这锻炼了观星者的大部分功能。 它是一个 R MArkdown 文件,为那些产生 stargazer 输出的块设置了块选项 results='asis'。

stargazer 命令本身有一个参数“type”。 默认值为 type='latex' 在 Jake Russ 的用于生成网页的备忘单中,始终使用 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'

然后每个表格都被写入,每行一个单元格,在页面的一侧没有格式化!

Stargazer 非常棒,但有一段时间没有更新,因此不是专门为与knitr或 RStudio 的交互式查看器选项进行交互而设计的。 缺乏交互式查看和自动 html/latex 检测会导致至少两个问题:

  • 对于希望在 RStudio 中易于阅读的内联输出的 R 新用户来说,这尤其令人困惑

  • 当编织大型 html 或乳胶表需要时间时,在更复杂的文档中也会令人沮丧

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

  • 检查文档是否被编织成乳胶或 html
  • 如果文档没有被编织成乳胶,输出到文本或 html
  • 在 RStudio 中以交互方式运行时,输出可以内联显示为文本和/或在查看器窗格中显示为 html

有关 RStudio 的查看器功能rstudioapi::viewer()的更多信息,请参阅: https ://rstudio.github.io/rstudio-extensions/pkgdown/rstudioapi/reference/viewer.html

以下四个代码块应在标准 R 降价文档中工作,并在编织时自动分配正确的类型(乳胶或 html)。 它们还应该以交互方式运行并内联输出和/或输出到查看器窗格。

最后,为了将观星表自动转换为包含 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)

```

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM