如何在 RMarkdown 中引用 stargazer 表?
How to ref stargazer tables in RMarkdown?
看来 stargazer 表不能再在 RMarkdown 中引用了。
我已未成功 尝试实施 github 页面上发布的涉及此问题的解决方法 https://github.com/rstudio/bookdown/issues/175
---
title: "Ref Stargazer Test"
output:
bookdown::html_document2: default
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r results='asis'}
m1 <- lm(mpg ~ cyl + disp, mtcars)
stargazer::stargazer(m1, type = "html", label = "tab:model")
```
Table \@ref(tab:model) should show something on cars.
```{r mytab, results="asis"}
stargazer::stargazer(attitude,
type=ifelse(knitr::is_latex_output(),"latex","html"),
label=knitr::opts_current$get("label"),
title="Stargazer <3 Bookdown")
```
As Table \@ref(tab:mytab) shows, relationships may be hard work but love finds a way.
自 2021 年 7 月起,引用不起作用(rmarkdown 2.9、bookdown 0.22、stargazer 5.2.2)。
还有其他可行的解决方法吗?
我不知道如何使用 stargazer
实现此目的。我会注意到 bookdown
cross-references 是一个相当新的功能,stargazer
已经 3 年多没有更新了,所以问题肯定会出现。
一个更现代的选择是 the modelsummary
package(免责声明:我是维护者)。在我的偏见中,这个包更灵活和健壮,但是 YMMV.
下面我用 cross-references 粘贴了 Rmarkdown 文档的最小示例。有几点需要注意:
modelsummary
会自动检测输出格式,因此您只需在 Rmarkdown 文档最顶部的 YAML header 中指定 LaTeX 或 HTML。无需使用 modelsummary
的 output
参数(但无论如何都要查看文档!)。
- table 标签由块的名称设置。在这里,它被称为“模型”,所以我们使用
tab:model
作为 cross-reference.
- 您的 table 需要一个标题,否则 cross-references 将不会持续显示。
---
title: "modelsummary cross-reference test"
output:
bookdown::html_document2: default
---
```{r model}
library(modelsummary)
m1 <- lm(mpg ~ cyl + disp, mtcars)
modelsummary(m1, title = "A table title")
```
Table \@ref(tab:model) should show something on cars.
我自己找到了适用于 LaTeX 和 HTML 的解决方案。
---
title: "Ref Stargazer Test"
output:
bookdown::html_document2: default
---
Table \@ref(tab:mytable) is the referenced table.
```{r mytable, results='asis', fig.cap="This is my table."}
m1 <- lm(mpg ~ cyl + disp, mtcars)
# Use title caption from fig.cap
tit <- knitr::opts_current$get("fig.cap")
# Adding caption for html output
tit_html <- paste0('<span id="tab:',
knitr::opts_current$get("label"),
'">(#tab:',
knitr::opts_current$get("label"),
')</span>',
tit)
stargazer::stargazer(m1,
label = paste0("tab:", knitr::opts_current$get("label")),
title = ifelse(knitr::is_latex_output(), tit, tit_html),
type = ifelse(knitr::is_latex_output(),"latex","html"),
header = F
)
```
您现在还可以在块 header 中使用 fig.cap
参数来为您的 table 编写您想要的标题。对于引用,您必须引用块标签(在本例中为“mytable”)。 stargazer
中的 title
参数创建了 <caption>
元素,这就是为什么要在此处插入 html 标题的原因。
解决此问题的一个简单方法是在 stargazer
上手动添加您的 table 的名字。
label = "tab:table4"
因此您的代码应如下所示:
stargazer(m1, label = "tab:mytable")
现在您可以像往常一样在 Rmarkdown 中进行交叉引用 \ref{tab:mytable}
看来 stargazer 表不能再在 RMarkdown 中引用了。
我已未成功 尝试实施 github 页面上发布的涉及此问题的解决方法 https://github.com/rstudio/bookdown/issues/175
---
title: "Ref Stargazer Test"
output:
bookdown::html_document2: default
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r results='asis'}
m1 <- lm(mpg ~ cyl + disp, mtcars)
stargazer::stargazer(m1, type = "html", label = "tab:model")
```
Table \@ref(tab:model) should show something on cars.
```{r mytab, results="asis"}
stargazer::stargazer(attitude,
type=ifelse(knitr::is_latex_output(),"latex","html"),
label=knitr::opts_current$get("label"),
title="Stargazer <3 Bookdown")
```
As Table \@ref(tab:mytab) shows, relationships may be hard work but love finds a way.
自 2021 年 7 月起,引用不起作用(rmarkdown 2.9、bookdown 0.22、stargazer 5.2.2)。
还有其他可行的解决方法吗?
我不知道如何使用 stargazer
实现此目的。我会注意到 bookdown
cross-references 是一个相当新的功能,stargazer
已经 3 年多没有更新了,所以问题肯定会出现。
一个更现代的选择是 the modelsummary
package(免责声明:我是维护者)。在我的偏见中,这个包更灵活和健壮,但是 YMMV.
下面我用 cross-references 粘贴了 Rmarkdown 文档的最小示例。有几点需要注意:
modelsummary
会自动检测输出格式,因此您只需在 Rmarkdown 文档最顶部的 YAML header 中指定 LaTeX 或 HTML。无需使用modelsummary
的output
参数(但无论如何都要查看文档!)。- table 标签由块的名称设置。在这里,它被称为“模型”,所以我们使用
tab:model
作为 cross-reference. - 您的 table 需要一个标题,否则 cross-references 将不会持续显示。
---
title: "modelsummary cross-reference test"
output:
bookdown::html_document2: default
---
```{r model}
library(modelsummary)
m1 <- lm(mpg ~ cyl + disp, mtcars)
modelsummary(m1, title = "A table title")
```
Table \@ref(tab:model) should show something on cars.
我自己找到了适用于 LaTeX 和 HTML 的解决方案。
---
title: "Ref Stargazer Test"
output:
bookdown::html_document2: default
---
Table \@ref(tab:mytable) is the referenced table.
```{r mytable, results='asis', fig.cap="This is my table."}
m1 <- lm(mpg ~ cyl + disp, mtcars)
# Use title caption from fig.cap
tit <- knitr::opts_current$get("fig.cap")
# Adding caption for html output
tit_html <- paste0('<span id="tab:',
knitr::opts_current$get("label"),
'">(#tab:',
knitr::opts_current$get("label"),
')</span>',
tit)
stargazer::stargazer(m1,
label = paste0("tab:", knitr::opts_current$get("label")),
title = ifelse(knitr::is_latex_output(), tit, tit_html),
type = ifelse(knitr::is_latex_output(),"latex","html"),
header = F
)
```
您现在还可以在块 header 中使用 fig.cap
参数来为您的 table 编写您想要的标题。对于引用,您必须引用块标签(在本例中为“mytable”)。 stargazer
中的 title
参数创建了 <caption>
元素,这就是为什么要在此处插入 html 标题的原因。
解决此问题的一个简单方法是在 stargazer
上手动添加您的 table 的名字。
label = "tab:table4"
因此您的代码应如下所示:
stargazer(m1, label = "tab:mytable")
现在您可以像往常一样在 Rmarkdown 中进行交叉引用 \ref{tab:mytable}