2013-03-06 13 views
14

Zastanawiam się, czy możliwe jest użycie podpisów tabelowych, takich jak podpisy rysunków przy użyciu pliku knitr w pliku .Rmd?Korzystanie z nagłówka tabeli w pliku rreddown R przy użyciu knitr do użycia w pandoc, aby przekonwertować do formatu pdf

Widziałem opcje podpisu rysunkowego, ale nie widziałem opcji dla podpisu tabeli. Chcę również usunąć wiadomość, taką jak "% latex table generated in R 2.15.2 by xtable 1.7-0 package % Wed Mar 06 15:02:11 2013".

użyłem X tabeli, aby utworzyć tabelę: Przykładowy kod użyłem jest następujący:

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

W tabeli mam po przetworzeniu przez pandoc jest następujący:

enter image description here

Próbowałem użyć message = FALSE w pliku Rmd, aby pozbyć się komunikatu pokazanego powyżej. Chciałbym również wiedzieć, czy możliwe jest automatyczne dodanie podpisu do tabeli w Rmd?

Podpis Podam coś podobnego poniżej (dotyczy figury), a numer figurki jest automatycznie aktualizowany.

Ten wynik jest migawką z pliku PDF wygenerowanego przez pdf przy użyciu pliku markdown utworzonego przez knitr.

enter image description here

Dziękuję.

+0

Myślę, że większość odpowiedzi, których szukasz, to używanie '? Xtable' i'? Print.xtable'. Spójrz na 'type' i' caption' –

+0

dla komentarza LaTeX, problem został rozwiązany w 'xtable'; zobacz https://github.com/yihui/knitr-book/issues/3 (nowa wersja 'xtable' znajduje się teraz na CRAN) –

+0

@ Yihui: Uaktualniłem mój xtable z CRAN, a teraz mam najnowszą wersję i jestem wciąż uzyskując takie same wyniki. Użyłem kodu

'''{r table2, results='asis', message=FALSE,echo=FALSE} library(xtable) print(xtable(head(iris))) '''
. Czy robię coś źle ? –

Odpowiedz

11

Jeśli nie będziesz nalegać na używanie rozwiązania LaTeX/HTML-only z nieziemskim pakietem xtable, możesz osiągnąć to samo ze znacznikiem Pandoc. Jedną z możliwości jest dodanie caption manually pod tabelą lub użyj mój R Pandoc writer package:

> 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! 

Następnie użyj Pandoc przekonwertować ten plik markdown do HTML, lateks, DOCX, ODT lub innych popularnych formatów dokumentów.

+0

Próbuję użyć twojego ładnego pakietu 'pander', ale nie mogę znaleźć opcji do kontroli ** pozycja ** w nagłówku * podpisu * (domyślnie pozycja jest pod tabelą, ale potrzebuję powyżej). Przejrzałem dokumentację i przeglądam w Internecie, ale bezskutecznie. Wszelkie porady? (Rozumiem, że Mogę napisać napis niezależnie od R Markdown, ale wtedy pojawia się kwestia marginesu pomiędzy podpisami a tabelą. Byłoby miło móc określić zarówno pozycję (powyżej/poniżej), jak i margines.) –

+1

@AleksandrBlekh mając napis nad tabelą nie jest poprawną składnią skoku, powinien znajdować się pod tabelą, z drugiej strony można ją renderować powyżej tabeli/obrazu np. w HTML lub LaTeX. drugi, proponuję pakiety LaTeX 'caption' i' floatrow', takie jak '\ flo atsetup [table] {capposition = top} ' – daroczig

+0

Dzięki za szybką odpowiedź i miłe sugestie! Jednym z powodów, dla których staram się używać formatu 'pander' i R Markdown ', jest możliwość generowania wyjścia wieloformatowego. Przebieg trasy zależnej od formatu nie jest optymalny pod tym względem (brak pojedynczej bazy kodów); Rzeczywiście zaimplementowałem pewne rzeczy w specyficzny dla LaTeXa sposób, i zajęło mi to trochę czasu. Nie mogę sobie wyobrazić spędzenia więcej czasu na obsługę HMTL itp. Właściwie znalazłem rozwiązanie: potrzebuję 'pandoc' 1.13+, które zawiera tę poprawkę (napis powinien być na górze): szukaj" nagłówków tabel powyżej tabel "tutaj: http://johnmacfarlane.net/pandoc/releases.html. –

9

Możesz wstawić tabele z automatycznie numerowanymi napisami w przecenie do przetwarzania za pomocą pandoc za pomocą prostego kodu knitr. Włóż ten fragment kodu na górze .rmd pliku:

```{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) 
}) 
``` 

Aby wstawić numerowaną podpis tabeli:

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

nadrzędnymi hak wyjściowy i stosując tab.cap nie trzeba zaśmiecaj opcje porcji z wynikami = 'asis'.

Dzięki Knitr!

PS: Jeśli chcesz przekonwertować na lateks/pdf, prawdopodobnie chcesz lateks, aby numerować tabele dla ciebie. W takim przypadku możesz zmienić tn(options$tab.cap) na paste('\n\n:', options$tab.cap, sep='') - ale nie przetestowałem tego.

+0

Próbowałem tego z RStudio z uruchomieniem rmarkdown_0.3.3; Nie potrzebowałem ':' po '\ n \ n'. Ponieważ: był drukowany. Jednak nie mogę wymyślić, jak napisać napis PRZED (POWYŻSZE) do stołu. Jak mógłbym zmienić hak, żeby wykonać tę pracę?Na rysunkach, można to zrobić za pomocą 'knit_hooks $ zestaw (wykres = function (x, opcje) { pasty ('

', $ options fig.cap, '
', sep = '')' – jessi

+0

Zmieniłem: 'wklej ('\ n \ n: Tabela', i, ':', x, sep = '') do wklejenia ('\ n \ n Tabela', i, ':', x, sep = '', '

') 'aby dodać spację po podpisie, usuń: który został wydrukowany i zachowaj formatowanie podpisów –

5

Możesz to zrobić pod numerem xtable. Dodaj caption do xtable i comment=FALSE do funkcji print.

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

Zobacz dokumentację xtable i print.xtable.