簡體   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