14

我想知道是否可以在 .Rmd 文件中使用 knitr 的表格标题,如图形标题?

我看到了图形标题的选项,但我看不到表格标题的选项。我还想删除诸如"% latex table generated in R 2.15.2 by xtable 1.7-0 package % Wed Mar 06 15:02:11 2013".

我使用X表创建表:我使用的示例代码如下:

```{r table2, results='asis', message=FALSE} 
library(xtable) 
print(xtable(head(iris))) 
``` 

我通过pandoc处理后得到的表如下:

在此处输入图像描述

我尝试在 Rmd 文件中使用 message=FALSE 来消除上面显示的消息。我还想知道是否可以在 Rmd 中自动为表格添加标题?

通过标题,我的意思是如下所示(这是用于图形),并且图形编号会自动更新。

此输出是 pdf 使用 knitr 创建的 markdown 文件生成的 pdf 的快照。

在此处输入图像描述

谢谢你。

4

4 回答 4

12

如果您不坚持将 LaTeX/HTML-only 解决方案与其他很棒的xtable包一起使用,您可能会通过 Pandoc 的降价实现相同的效果。一种选择是在表格下方手动添加标题,或使用我的R Pandoc writer 包

> library(pander)                         # load pkg
> panderOptions('table.split.table', Inf) # not to split table
> set.caption('Hello Fisher!')            # add caption
> pander(head(iris))                      # show (almost) any R object in markdown
-------------------------------------------------------------------
 Sepal.Length   Sepal.Width   Petal.Length   Petal.Width   Species 
-------------- ------------- -------------- ------------- ---------
     5.1            3.5           1.4            0.2       setosa  

     4.9            3.0           1.4            0.2       setosa  

     4.7            3.2           1.3            0.2       setosa  

     4.6            3.1           1.5            0.2       setosa  

     5.0            3.6           1.4            0.2       setosa  

     5.4            3.9           1.7            0.4       setosa  
-------------------------------------------------------------------

Table: Hello Fisher!

然后使用 Pandoc 将此 markdown 文件转换为 HTML、LaTeX、docx、odt 或任何其他流行的文档格式。

于 2013-03-07T19:57:18.413 回答
10

您可以在 markdown 中插入带有自动编号标题的表格,以便使用直 knitr 代码使用 pandoc 进行处理。将此代码段插入 .rmd 文件的顶部:

```{r setup, echo=FALSE}
tn = local({
  i = 0
  function(x) {
    i <<- i + 1
    paste('\n\n:Table ', i, ': ', x, sep = '')
    # The : before Table tells pandoc to wrap your caption in <caption></caption>
  }
})
knit_hooks$set(tab.cap = function(before, options, envir) {
  if(!before)
    tn(options$tab.cap)
})
default_output_hook = knit_hooks$get("output")
knit_hooks$set(output = function(x, options) {
  if (is.null(options$tab.cap) == F)  
    x
  else
    default_output_hook(x,options)
})
```

要插入编号的表格标题:

```{r myirischunk, tab.cap="This is the head of the Iris table"}
kable(head(iris))
```

通过覆盖输出挂钩并使用 tab.cap,您无​​需使用 results='asis' 来混淆块选项。

谢谢针织者!

PS:如果您想转换为 Latex/pdf,您可能希望 Latex 为您的表格编号。在这种情况下,您可以更改tn(options$tab.cap)paste('\n\n:', options$tab.cap, sep='')- 但我尚未对此进行测试。

于 2013-09-07T10:17:57.033 回答
5

您可以使用xtable. 添加captionxtablecomment=FALSEprint函数。

print(
  xtable(
    head(iris),
    caption = 'Iris data'
  ),
  comment = FALSE,
  type = 'latex'
)

请参阅xtableprint.xtable文档。

于 2014-07-06T05:27:44.647 回答
0

我知道这是很多年前的事了,但是如果有像我这样的人来到这里寻找答案,我会告诉你我找到的相同问题的答案。

这真的很简单,我们只需要输入:

```{r mostrarSerie,results='asis',echo=FALSE}
library(xtable)
options(xtable.floating = TRUE)
print(xtable(AP, digits = 0,caption = "Serie de tiempo"),comment = FALSE)
```

重要的一步是输入选项xtable.floating = TRUE,因为 LaTeX 会识别表格。

于 2021-03-28T21:02:18.100 回答