2016-07-12 19 views
1

Ich erstelle tatsächlich eine glänzende App. In dieser App gibt es eine Download-Schaltfläche, die eine PDF-Datei herunterlädt, die von der Benutzereingabe abhängt.Eval LaTeX-Code in R Chunk (Knitr)

Also verwende ich eine .rnw Datei, um das PDF-Dokument zu generieren. Ich möchte nur eine Tabelle (mit tabellarischer Tabelle) erstellen, die eine Reihe von Zeilen hat, die von der Eingabe des Anwenders abhängig ist.

Also in meinem R chunck, ich würde so etwas tun:

\begin{tabular}{c|c} 

<<echo=FALSE>>= 
for (index in 1:nrow(myData)) 
{ 
    SomethingThatRunLaTeXCode(paste0("\hline ", 
    "\Sexpr{",myData[index,1],"}"," % ","\Sexpr{",myData[index,2],"}")) 
} 
\hline 
\end{tabular} 
@ 
+1

Warum nicht 'kable' oder' xtable' verwenden, um stattdessen die Tabelle zu erstellen? –

+0

Ich versuche es und ich sage dir. Danke ! – Smich7

+0

xtable generieren einen Latex-Code, der auf meinem PDF gedruckt wird, aber ich habe keine Tabelle auf ... Ich mache: '<< Echo = FALSE, Ergebnisse =" Tex ">> = data_tab <- data_init [-1,]; df <- data.frame ("Vos commentaires:" = data_tab [Schnittpunkt (Schnittpunkt (all_v, was (! Is.na (data_init [, 28]))), welcher (str_replace_all (data_tab [, 28], "", "")! = "")), 28]); xtab <-xtable (df); print.xtable (df); @ ' – Smich7

Antwort

1

Wie von sebastian-c vorgeschlagen, eine viel bessere Möglichkeit, eine solche Tabelle zu machen, ist das xtable Paket zusammen zu verwenden, mit Knitr. Verwenden Sie die Chunk-Option results='asis', damit die Knitr-Blöcke TeX verstehen.

Da Ihre Daten ein data.frame ist, ist es gerade nach vorn:

<<echo = FALSE, results = "asis">>= 

## test data 
set.seed(1) 
df <- data.frame(Gaussian = rnorm(10), Exponential = rexp(10)) 

library(xtable) 
cap = paste("My caption can span multiple lines and", 
      "can be arbitrarily long.") 
xtable(df,caption = cap) 
@ 

Für die vollständige Anpassung, verwenden Sie die Funktion print.xtable auf Ihrem xtable Objekt.

<<echo = FALSE, results = "asis">>= 
print.xtable(xtable(df),table.placement = "") 
@