2012-06-01 10 views
9

Ich habe dir bisher eine Frage zu how to export a HTML table in R and have control over line borders gestellt.Wie HTML-Tabellen und begleitende CSS mit R Markdown oder HTML Sweave erzeugen?

Ich bin LaTeX gewohnt, wo, wenn Sie eine Tabelle erstellen, die Formatierung der Tabelle weitgehend durch den Text und das Markup bestimmt wird, die an diesem Punkt angezeigt werden. Dies funktioniert gut für Swave, da Ihr R-Code-Chunk LaTeX-Tabellen-Markup an diesem Punkt ausgeben kann. Ich verstehe auch, dass es Werkzeuge wie xtable gibt, die HTML-Markup für eine Tabelle erzeugen können.

Die Kontrolle über HTML-Tabellen scheint jedoch auf Stylesheets zu beruhen, die im Kopf des Dokuments erscheinen sollen und nicht in der Position, wo der R-Code-Chunk platziert wird. Natürlich könnte ich einfach Inhalte in das Stylesheet einfügen, aber in wissenschaftlichen Anwendungen kann es oft eine ganz bestimmte Tabellenformatierung geben, die in einigen Punkten von Tabelle zu Tabelle variiert.

So meine Frage:

  • Im Allgemeinen, wie Sie eine HTML-Tabelle mit Literarischer Programmierung wie R Markdown-Format haben oder auch aus reinem HTML, wenn die Formatierung der Ausgabe Ausgabe erfordert in einem separaten Ort geschaffen werden im Dokument (dh CSS für die Tabelle im Header), wo der R-Code-Chunk platziert ist (dh die Tabelle selbst im Body)?
+0

Indem Sie der Tabelle eine Klasse geben und klassenspezifische CSS haben. Bitte fügen Sie eine Gegenprobe hinzu, wenn diese Lösung das Problem nicht lösen sollte. –

+0

@Dieter Ich merke, dass das eine Lösung ist. Die Frage, die ich habe, ist, wie erhalten Sie die klassenspezifische CSS aus dem R-Code-Block in die Kopfzeile in einem R Markdown oder HTML Sweave-Dokument? Ich bin daran interessiert, wie Sie es überhaupt tun können, und noch mehr daran interessiert, wie Sie es auf elegante und direkte Art und Weise tun können. –

+0

a) Schnell und schmutzig: mit Katze. b) Für ernsthafte Arbeit: mit einer Brühvorlage. –

Antwort

5

ich drei Möglichkeiten, ohne Messing mit Ihrer Werkzeugkette denken kann, sie alle Art von Hacky sind.

  1. Geben Sie einfach die <style> direkt in den Körper. Dies ist technisch nicht gültig, aber es funktioniert in jedem gängigen Browser.

  2. Emit JavaScript, das zur Laufzeit einen <style> Block erstellt und an den Kopf anfügt (here's in einer Richtung). Dies wird in der HTML-Quelle und im R-Code etwas eklig aussehen, aber es wird funktionieren und es wird validiert.

  3. Verwenden Sie eine scoped style block. Dies ist genau das, wonach Sie suchen, außer dass das Attribut scope in HTML5 neu ist und noch nicht in einem größeren Browser implementiert wurde. Wenn Sie jedoch Ihre Styles auf eindeutig generierten IDs basieren (dh Ihre Regeln sind so geschrieben, dass selbst wenn sie auf das gesamte Dokument angewendet werden, werden sie nichts durcheinander bringen), stelle ich mir vor, dass die Browser das "Bereichs" -Attribut und alles ignorieren wird richtig funktionieren - dann wird dies effektiv eine Version von Option 1, die passiert, um zu validieren!

(Ich würde mit # 3, persönlich.)

Wenn Sie nicht bereits haben, ist es wert wäre, einen Thread im RStudio Support-Forum darüber beginnen; Auch wenn es sich nicht unbedingt um ein RStudio-Problem handelt, arbeiten wir offensichtlich intensiv am End-to-End-Szenario der Veröffentlichung von Berichten in R Markdown und würden gerne mehr über Ihre spezifischen Beispiele erfahren. Tabellen werden eindeutig einen großen Teil dessen ausmachen, was die Leute mit diesen Berichten machen, und wir wissen, dass dies momentan ein Schwachpunkt ist, den wir in zukünftigen Versionen angehen wollen.

+0

Hallo Joe, es ist großartig zu sehen, wie schnell RStudio innoviert hat. Du hast mir einige gute Optionen gegeben, die du erforschen kannst. –

1

Ok, ich hoffe, ich habe es jetzt. Sie sollten einige zusätzliche Knitroptionen einstellen, und Sie können css() dynamisch cat(), wenn Sie möchten.

<!DOCTYPE html> 
<head> 
<style type="text/css"> 
.greenback { 
    background-color: teal; 
    color: white; 
} 
.greenback td { 
    border: dotted gray; 
} 
.bluescreen { 
    background-color: blue; 
    color: white; 
} 
.bluescreen td { 
    border: thick solid; 
    padding:2px; 
    margin:2px; 
} 

</style> 
</head> 

<body> 
<table class="greenback"> 
<tr><td>Hello</td><td>Mars</td><tr> 
<tr><td>World</td><td>Moon</td><tr> 
</table> 

Could use some xtable code here instead. 

<!--begin.rcode 
cat(' 
<table class="bluescreen"> 
<tr><td>Hello</td><td>Mars</td><tr> 
<tr><td>World</td><td>Moon</td><tr> 
</table> 
') 
    end.rcode--> 

</body> 
</html> 
+0

+1 Danke dafür. Ich denke, ich suche nach einer Möglichkeit, die Stilinformationen in den Körper einzufügen, so dass eine R-Funktion sowohl die Stilinformationen als auch den Tabellentext in ein R-Markdown-Dokument schreiben kann. gvisTable scheint mit Skripten etwas davon zu machen. –

2

Eine alternative Methode wäre pander als R Abschlags-Backend zu verwenden (sorry für diese Marketing-ähnliche Antwort, aber ich denke, dass meine Pandoc.brew Funktion für diesen Zweck wirklich praktisch sein könnte).

Es ist ähnlich wie knitr (Parsing/evaling R-Befehle in einem Abschlag formatierte Datei), aber unter Verwendung von brew Syntax für R Codeblocks (zB <%...%> für die allgemeinen R-Code - wie Schleifen usw. und <%=...%> für die Ergebnisse in einem Block zurückkehrt) . Aber unterscheidet sich von brew als Pandoc.brew nicht nur cat führt zu einem Code-Block, aber läuft meine pander generische Methode, die (ziemlich q große Vielfalt von) R-Objekte (IMHO) ziemlich Pandocs Markdown-Format transformiert.

Pandoc.brew auf einer Abschlag formatierte Datei So läuft in einer sauberen Abschlags-Datei mit allen R Codeblöcken führen würde laufen - und Sie müssen nicht mit xtable und anderen Verbesserungen (auch nicht mit Plots wie alle R Codeblocks resultierenden beschäftigen in Ein Bild wird in eine png Datei gerendert und in der Textdatei für die Textabschrift verlinkt.

Und darüber, warum ich begann, hier zu antworten: mit pander können Sie spezielle Optionen an pandoc, z. Hinzufügen eines benutzerdefinierten CSS-Stylesheets (oder JS usw.) zum generierten HTML-Header, siehe Details unter Pandoc's homepage. Auf dieser Grundlage können Sie problemlos Ihre CSS-Datei (en) oder auch nur eine Reihe von Style-Parametern hinzufügen. Dies könnte in pander mit Pandoc.convertoption getan werden. Übrigens müssen Sie nicht einmal meine gespaltene brew Funktion verwenden, Sie können Ihre Abschriften-Datei mit z. knitr und rufen Sie Pandoc mit der obigen Funktion.

pander fügt einige CSS/JS zu generierten HTML-Dateien hinzu, die (IMHO) ziemlich hübsche Ausgabe erzeugen würden, aber Sie können das leicht anpassen und dort Ihre eigenen Dateien hinzufügen.

Zum Beispiel: Sie erhalten würden this HTML file basierend this markdown standardmäßig die Pandoc.brew ed aus dieser ganz kurzmarkdown syntax brew file war. BTW my github page wurde auch von meinem Markdown-Parser generiert/automatisch formatiert. Ich würde wirklich schätzen, wenn man versuchen würde, es :)


HINWEIS: die oben genannten Anrufe versuchen Sie Pandoc vorinstalliert benötigen würde, auch würden Sie eine up-to-date Version benötigen beide rapport, beidepander. Siehe installation details.

2

Eine Option, die nicht vollständig das Problem lösen ist gvisTable zu verwenden:

Hier ist eine grundlegende gvisTable:

```{r message=FALSE} 
# install.packages("googleVis") 
library(googleVis) 
library(MASS) 
data(Animals) 
``` 

```{r results='asis'} 
tab1 <- gvisTable(Animals, 
        options = list(width = 600, height = 650, 
            page = "enable", 
            pageSize = nrow(Animals))) 
print(tab1, "chart") 
``` 
  • ?print.gvis erklärt einige der Optionen zum Drucken des gvis Objekt.
  • Die Option tag="chart" ist für R Markdown-Dokumente erforderlich, da dies bedeutet, dass die Ausgabe genau das ist, was für das Objekt erforderlich ist, und nicht eine vollständige HTML-Seite wie standardmäßig.
  • Siehe output of this and a little more here
+0

Wenn Sie ein solches Beispiel ausprobieren, funktioniert LaTeX nicht mehr. –

1

Neil Saunders hat ein Tutorial auf customising CSS for HTML generated using RStudio. Es zeigt, wie Sie die integrierte Stildatei ändern und diese alternative Datei bereitstellen können.

+0

Das scheint sehr nett, aber ich verstehe nicht, wie man die Datei 'custom.css' macht. Wo müssen wir die Änderungen der 'markdown.css' Datei hinzufügen? –

+0

Aus dem Lesen des Tutorials klingt es wie Sie (a) eine neue CSS-Datei im Arbeitsverzeichnis erstellen, (b) das 'Stylesheet' -Argument in der' MarkdownToHTML'-Funktion mit dem Wert des CSS-Dateinamens verwenden. –

+0

Ja, aber das Tutorial sagt, dass wir die Datei 'markdown.css' modifizieren müssen. Es zeigt diese Änderungen, aber ich weiß nicht, wo ich diese Änderungen einfügen soll. Am Anfang der Datei? Am Ende ? Die Sprache dieser Modifikationen sieht nicht wie die Sprache der 'markdown.css'-Datei aus, daher verstehe ich nicht einmal, warum sie Modifikationen genannt werden. –