2013-03-06 13 views
14

Mi chiedo se sia possibile utilizzare le didascalie delle tabelle come le didascalie delle figure utilizzando knitr nel file .Rmd?Utilizzo della didascalia della tabella sul file di markdown R utilizzando knitr da utilizzare in pandoc per convertire in pdf

Ho visto le opzioni per la didascalia della figura ma non ho visto l'opzione per la didascalia della tabella. Voglio anche rimuovere il messaggio come "% latex table generated in R 2.15.2 by xtable 1.7-0 package % Wed Mar 06 15:02:11 2013".

ho usato tavola X per creare la tabella: Il codice di esempio che ho usato è il seguente:

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

La tabella ho ottenuto dopo l'elaborazione attraverso Pandoc è la seguente:

enter image description here

Ho provato a usare message = FALSE nel file Rmd per eliminare il messaggio mostrato sopra. Voglio anche sapere se è possibile aggiungere automaticamente la didascalia per la tabella in Rmd?

Per didascalia intendo qualcosa come di seguito (questo è per la figura) e il numero di figura viene aggiornato automaticamente.

Questa uscita è un'istantanea dal pdf generato da pdf utilizzando il file markdown creato da knitr.

enter image description here

Grazie.

+0

Penso che molte delle risposte che cercate siano usando '? Xtable' e'? Print.xtable'. Guardate 'type' e' caption' –

+0

per il commento LaTeX, il problema è stato risolto in 'xtable'; vedere https://github.com/yihui/knitr-book/issues/3 (la nuova versione di 'xtable' è su CRAN ora) –

+0

@ Yihui: ho aggiornato il mio xtable da CRAN e ora ho l'ultima versione e sono ottenendo sempre lo stesso risultato. Ho usato il codice

'''{r table2, results='asis', message=FALSE,echo=FALSE} library(xtable) print(xtable(head(iris))) '''
. Ho fatto qualcosa di sbagliato? –

risposta

11

Se non si desidera utilizzare una soluzione solo LaTeX/HTML con il pacchetto altrimenti straordinario xtable, è possibile ottenere lo stesso risultato con il markdown di Pandoc. Una possibilità è quella di aggiungere il caption manually sotto la tabella, o utilizzare il mio 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! 

Quindi utilizzare Pandoc per convertire questo file Markdown in HTML, LaTeX, docx, altri formati di documento popolari odt o qualsiasi.

+0

Sto cercando di usare il tuo bel pacchetto 'pander', ma non ho trovato un'opzione per controllare la ** posizione ** della didascalia * di una tabella * (per impostazione predefinita, la posizione è sotto la tabella, ma ho bisogno in precedenza). Ho controllato la documentazione e sul Web, ma senza risultato. Posso produrre didascalie in modo indipendente come testo R Markdown, ma c'è un problema di margine tra la didascalia e la tabella: sarebbe bello poter specificare sia la posizione (sopra/sotto) che il margine.) –

+1

@AleksandrBlekh avere la didascalia sopra la tabella non è una sintassi di markdown valida, dovrebbe rimanere sotto la tabella, d'altra parte è possibile renderla sopra la tabella/immagine, ad esempio in HTML o LaTeX. quest'ultimo, suggerisco i pacchetti 'Caption' e' floatrow' LaTeX, come '\ flo atsetup [table] {capposition = top} ' – daroczig

+0

Grazie per una rapida risposta e buoni suggerimenti! Uno dei motivi per cui sto cercando di usare 'pander' e il formato R Markdown è di essere in grado di produrre output multi-formato, secondo necessità. Il percorso specifico del formato non è ottimale in questo senso (nessuna base di codice singola); In realtà ho implementato alcune cose in un modo specifico di LaTeX e ci è voluto un po 'solo per quello. Non posso immaginare di passare più tempo a supportare HMTL, ecc. In realtà, ho trovato una soluzione: ho bisogno di 'pandoc' 1.13+, che contiene questa correzione (la didascalia dovrebbe essere in cima): cerca" didascalie delle tabelle sopra le tabelle "qui: http://johnmacfarlane.net/pandoc/releases.html. –

9

È possibile inserire tabelle con didascalie numerate automaticamente nel contrassegno per l'elaborazione con pandoc utilizzando il codice knitr diretto. Inserire questo frammento di codice nella parte superiore del file .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) 
}) 
``` 

Per inserire una tabella didascalia numerata:

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

sovrascrivendo il gancio di uscita e usando tab.cap non è necessario per ingombrare le opzioni del blocco con risultati = 'asis'.

Grazie Knitr!

PS: Se si desidera convertire in latex/pdf, probabilmente si vorrebbe che il lattice numerasse i tavoli per voi. In tal caso, è possibile modificare tn(options$tab.cap) in paste('\n\n:', options$tab.cap, sep=''), ma non l'ho verificato.

+0

Ho provato questo con RStudio con rmarkdown_0.3.3; Non avevo bisogno di ':' dopo '\ n \ n'. Perché il: stava stampando. Tuttavia, non riesco a capire come ottenere la didascalia PRIMA (SOPRA) il tavolo. Come posso modificare l'hook per farlo funzionare?Per le cifre, posso farlo con 'knit_hooks $ set (plot = function (x, opzioni) { pasta ('

', opzioni di $ fig.cap, '
', sep = '')' – jessi

+0

Ho cambiato: 'incolla ('\ n \ n: Tabella', i, ':', x, sep = '') da incollare ('\ n \ n Tabella', i, ':', x, sep = '', '

') 'per aggiungere spazio dopo la didascalia, rimuovere il: che è stato stampato e mantenere la formattazione della didascalia –

5

È possibile eseguire questa operazione con xtable. Aggiungi caption a xtable e comment=FALSE alla funzione print.

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

Vedere la documentazione xtable e print.xtable.

Problemi correlati