微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 RMarkdown 中引用观星表?

如何解决如何在 RMarkdown 中引用观星表?

似乎不能再在 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 交叉引用是一个相当新的功能,而且 stargazer 已经超过 3 年没有更新了,所以问题肯定会出现。

另一种更现代的替代方案是 the modelsummary package(免责声明:我是维护者)。在我的偏见中,这个包更灵活和健壮,但 YMMV。

下面我粘贴了一个带有交叉引用的 Rmarkdown 文档的最小示例。需要注意的几点:

  • modelsummary 自动检测输出格式,因此您只需在 Rmarkdown 文档最顶部的 YAML 标头中指定 LaTeX 或 HTML。无需使用 outputmodelsummary 参数(但无论如何请查看文档!)。
  • 表标签由块的名称设置。在这里,它被称为“模型”,因此我们使用 tab:model 作为交叉引用。
  • 您的表格需要一个标题,否则交叉引用将无法一致显示。
---
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:',')</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
                     )
```

您现在还可以使用块标题中的 fig.cap 参数来编写您希望为表格使用的标题。对于引用,您必须引用块标签(在本例中为“mytable”)。 title 中的 stargazer 参数创建 <caption> 元素,这就是将 html 标题插入其中的原因。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。