2017-08-29 1 views
2

C'est un suivi de how to export a dataframe to latex with some minimal formatting?comment enregistrer et modifier le contenu d'une impression kable?

Considérons cet exemple de travail

```{r table, results='asis'} 
library(knitr) 
library(kableExtra) 
library(magrittr) 

dataframe <- data.frame(mytext1 = c('HELLO', 
            'WORLD'), 
         mytext2 = c('HELLO', 
            'AGAIN'), 
         value1 = c(1,2), 
         value2 = c(1,2)) 

piper <- dataframe %>% 
    kable(format = 'latex', booktabs = TRUE) %>% 
    add_header_above(header = c("Text" = 2, "Values" = 2)) 
``` 

qui donne

\begin{tabular}{llrr} 
\toprule 
\multicolumn{2}{c}{Text} & \multicolumn{2}{c}{Values} \\ 
\cmidrule(l{2pt}r{2pt}){1-2} \cmidrule(l{2pt}r{2pt}){3-4} 
mytext1 & mytext2 & value1 & value2\\ 
\midrule 
HELLO & HELLO & 1 & 1\\ 
WORLD & AGAIN & 2 & 2\\ 
\bottomrule 
\end{tabular} 

Ici, je voudrais écrire cette sortie dans un fichier tex et supprimer manuellement la première et la dernière ligne de celui-ci.

Malheureusement, le

naïf
piper %>% filter(row_number() >=2 & row_number() <=(length(piper) - 1)) 
Error in UseMethod("filter_") : 
    no applicable method for 'filter_' applied to an object of class "knitr_kable" 

ne fonctionne pas ici. Des idées? Merci!

+1

En supposant que vous travaillez dans un fichier .Rmd, voyez cela en conservant le fichier .tex intermédiaire, que vous pouvez modifier manuellement puis recompiler. http://rmarkdown.rstudio.com/pdf_document_format.html#keeping_intermediate_tex – meenaparam

+0

merci @meenarapan mais j'utilise un script normal –

+1

Donc, vous voulez supprimer manuellement dans le script R plutôt que dans votre fichier tex? – meenaparam

Répondre

4

Lorsque vous imprimez piper, vous appelez réellement une méthode d'impression qui apporte beaucoup de modifications. piper n'est pas seulement ces 10 lignes de texte.

Si vous voulez obtenir ces lignes, vous pouvez appeler capture.output(piper), et vous devriez pouvoir filtrer cela en tant que vecteur de caractères. Je ne pense pas que la fonction row_number() fonctionne sur ceux-ci, mais l'indexation régulière devrait. Par exemple,

lines <- piper %>% capture.output 
lines[c(-1, -length(lines))] 

Modifié ajouter: Pour imprimer sans que les numéros de ligne, utilisez cat(). Par exemple,

lines[c(-1, -length(lines))] %>% cat(sep = "\n") 
+0

merci très bien, mais il y a un problème. La sortie de la sortie de capture ressemble à '[1]" " [2]" \\ begin {tabulaire} {llrr} " [3]" \\ toprule " [4]" \\ multicolumn {2} {c } {Text} & \\ multicolumn {2} {c} {Values} \\\\ "' ... comment obtenir le bon contenu tex sans le numéro de ligne et le supplément '\\'? –

+0

'lignes [c (-1, -length (lignes))]%>% cat (fichier =" chemin/vers/monfichier.tex ", sep =" \ n ")' – Cedric