Использование заголовка таблицы в файле уценки R с помощью knitr для использования в pandoc для преобразования в pdf

Мне интересно, можно ли использовать подписи таблиц, такие как подписи к рисункам, с помощью knitr в файле .Rmd?

Я видел варианты подписи к рисунку, но не видел вариант подписи к таблице. Еще хочу удалить сообщение типа "% 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, выглядит следующим образом:

введите описание изображения здесь

Я попытался использовать message = FALSE в файле Rmd, чтобы избавиться от сообщения, показанного выше. Я также хочу знать, можно ли автоматически добавлять заголовок для таблицы в Rmd?

Под заголовком я подразумеваю что-то вроде того, что показано ниже (это для рисунка), и номер рисунка обновляется автоматически.

Этот результат представляет собой снимок PDF-файла, созданного PDF-файлом с использованием файла уценки, созданного knitr.

введите описание изображения здесь

Спасибо.


person Jd Baba    schedule 06.03.2013    source источник
comment
Я думаю, что многие ответы, которые вы ищете, связаны с использованием ?xtable и ?print.xtable. Посмотрите на type и caption   -  person Tyler Rinker    schedule 07.03.2013
comment
для комментария LaTeX проблема решена в xtable; см. github.com/yihui/knitr-book/issues/3 ( новая версия xtable сейчас на CRAN)   -  person Yihui Xie    schedule 07.03.2013
comment
@ Yihui: Я обновил свой xtable с CRAN, и теперь у меня последняя версия, и я все еще получаю тот же результат. Я использовал код ‹pre› {r table2, results='asis', message=FALSE,echo=FALSE} library(xtable) print(xtable(head(iris))) ‹/pre›. Я что-то не так сделал?   -  person Jd Baba    schedule 07.03.2013
comment
@Jdbaba прочитайте документацию ?print.xtable и посмотрите аргумент comment   -  person Yihui Xie    schedule 07.03.2013
comment
@ Yihui Большое спасибо, все сработало отлично.   -  person Jd Baba    schedule 07.03.2013
comment
@Jdbaba. Думаю, вы решили проблему с таблицей xtable, отображающей таблицу% latex, созданную в R 2.15.2 с помощью xtable. Я не могу найти решение, даже глядя на print.xtable. Спасибо.   -  person Maximilian    schedule 28.08.2013
comment
Итак, вот решение: print (xtable (yourtable, comment = getOption (xtable.comment, FALSE))   -  person Maximilian    schedule 28.08.2013


Ответы (4)


Если вы не настаиваете на использовании решения только для LaTeX / HTML с прекрасным пакетом xtable, вы можете добиться того же с помощью уценки Pandoc. Один из вариантов - добавить заголовок вручную под таблицей или использовать мой Пакет записи R Pandoc:

> 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 для преобразования этого файла уценки в HTML, LaTeX, docx, odt или любые другие популярные форматы документов.

person daroczig    schedule 07.03.2013
comment
Я пытаюсь использовать ваш красивый pander пакет, но не могу найти параметр для управления положением заголовка таблицы (по умолчанию положение находится под таблицей , но мне нужно выше). Я просмотрел документацию и в Интернете, но безрезультатно. Любой совет? (Я понимаю, что могу создать заголовок независимо как текст R Markdown, но тогда возникает проблема поля между заголовком и таблицей. Было бы неплохо иметь возможность указывать как положение (вверху / внизу), так и поле. ) - person Aleksandr Blekh; 19.11.2014
comment
@AleksandrBlekh с заголовком над таблицей не является допустимым синтаксисом уценки, он должен оставаться под таблицей. С другой стороны, вы можете визуализировать это так, чтобы оно находилось над таблицей / изображением, например, HTML или LaTeX. Для предыдущего используйте JavaScript, для последнего я предлагаю пакеты caption и floatrow LaTeX, например \floatsetup[table]{capposition=top} - person daroczig; 19.11.2014
comment
Спасибо за быстрый ответ и хорошие предложения! Одна из причин, по которой я пытаюсь использовать формат pander и R Markdown, заключается в том, чтобы иметь возможность производить многоформатный вывод по мере необходимости. В этом отношении переход по маршруту, зависящему от формата, не является оптимальным (нет единой кодовой базы); Я действительно реализовал некоторые вещи специфическим для LaTeX способом, и только для этого потребовалось время. Не могу себе представить, чтобы потратить больше времени на поддержку HMTL и т. Д. На самом деле я нашел решение: мне нужен pandoc 1.13+, который содержит это исправление (заголовок должен быть сверху): найдите здесь заголовки таблиц над таблицами: johnmacfarlane.net/pandoc/releases.html. - person Aleksandr Blekh; 19.11.2014
comment
Я нигде не могу найти pandoc binary для этого выпуска или выше для Ubuntu / Debian. Думаю, его еще ни у кого нет. Я читал в каком-то списке рассылки, что даже Ихуи не может его найти. Если найдете, дайте мне знать. - person Aleksandr Blekh; 19.11.2014
comment
@AleksandrBlekh Это исправление звучит великолепно, но мне кажется, что оно предназначено только для LaTeX. RStudio выпустил несколько двоичных файлов: s3.amazonaws.com/rstudio-buildtools/ pandoc-1.13.1.zip В любом случае, вы все равно можете использовать разметку с несколькими выходными форматами и заголовками над таблицами / изображениями, но таким образом вам придется разрабатывать свои собственные шаблоны для HTML, PDF и т. д. время, которое вы можете использовать для всех будущих отчетов, поэтому помимо вышеупомянутого однострочного вызова LaTeX вам понадобится еще один однострочный вызов JavaScript в вашем пользовательском шаблоне HTML для перемещения заголовка над объектами. - person daroczig; 19.11.2014
comment
Я ценю ваши комментарии и ссылку на двоичный файл. Я не уверен, что понимаю необходимость разработки шаблонов (если вы не имели в виду это в контексте использования старых версий pandoc без исправления). Если мне не нужно что-то необычное, разве недостаточно хороших вариантов по умолчанию? Извините, если мой вопрос звучит глупо, но я еще не владею внутренними сложностями воспроизводимых инструментов исследования (но желаю и прилагаю все усилия, чтобы узнать как можно больше). P.S. Как вы думаете, почему это исправление предназначено только для LaTeX? - person Aleksandr Blekh; 19.11.2014
comment
@AleksandrBlekh в журнале изменений, который вы связали выше, есть цитата под разделом LaTeX writer, поэтому я думаю, что это обновление не имеет ничего общего с другими выходными форматами. Кроме того, я думаю, что спецификация уценки подписей (чтобы она была под таблицей) также не изменилась. О шаблонах: наверное, мне следовало бы вместо этого написать таблицы стилей, см., Например, --template и -H на johnmacfarlane.net/pandoc/README.html#general-writer- options Вкратце: вы можете переопределить объединенный дизайн документов, созданных Pandoc. - person daroczig; 19.11.2014
comment
Спасибо за разъяснения. Просмотрите информацию. - person Aleksandr Blekh; 20.11.2014

Вы можете вставлять таблицы с автоматически пронумерованными заголовками в markdown для обработки с помощью pandoc, используя прямой код knitr. Вставьте этот фрагмент кода в начало вашего файла .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'.

Спасибо Knitr!

PS: Если вы хотите преобразовать в latex / pdf, вы, вероятно, захотите, чтобы латекс пронумеровал таблицы за вас. В этом случае вы можете изменить tn(options$tab.cap) на paste('\n\n:', options$tab.cap, sep=''), но я этого не проверял.

person DeanK    schedule 07.09.2013
comment
Я пробовал это с RStudio, работающим под управлением rmarkdown_0.3.3; Мне не понадобился : после \n\n. Потому что: печатал. Однако я не могу понять, как получить подпись ДО (ВЫШЕ) таблицы. Как я мог изменить крючок, чтобы он заработал? Для цифр я могу сделать это с помощью knit_hooks$set(plot = function(x, options) { paste('<figure><figcaption>', options$fig.cap, '</figcaption><img src="', opts_knit$get('base.url'), paste(x, collapse = '.'), '"></figure>', sep = '') - person jessi; 07.11.2014
comment
Я изменил: paste('\n\n:Table ', i, ': ', x, sep = '') to paste('\n\n<caption>Table ', i, ': ', x, sep = '','</caption><p></p>'), чтобы добавить пробел после заголовка, удалить:, который был напечатан, и сохранить форматирование заголовка. - person Tony Ladson; 22.04.2015
comment
@DeanK: какие-либо рекомендации о том, как это будет выглядеть, если я хочу добавить короткую версию подписи к оглавлению, то есть tab.scap? См. Также github.com/yihui/knitr/issues/1679. - person mavericks; 31.05.2020

Вы можете сделать это с помощью xtable. Добавьте caption к xtable и comment=FALSE к функции print.

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

См. xtable и print.xtable документация.

person junkka    schedule 06.07.2014

Я знаю, что это произошло много лет назад, но если кто-то вроде меня приехал сюда в поисках ответа, я скажу вам ответ, который я нашел для той же проблемы.

Это было действительно просто, нам просто нужно было поставить:

```{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 распознает таблицу.

person Osvaldo Santos    schedule 28.03.2021