knitr: Ausgabe-Hook mit einer output.lines = Option, die wie echo = 2: 6 funktioniert

8

In einem Buchprojekt habe ich viele Ausgaben, die ich abkürzen möchte, indem ich nur eine Teilmenge der Zeilen auswähle und ... hinzufüge, um anzuzeigen, dass einige Ausgaben entfernt wurden. In der Ausgabe von summary(lm()) möchte ich zum Beispiel nur die Tabelle der Koeffizienten ausgeben und sie wie folgt aussehen lassen:

%Vor%

Ich habe den folgenden Ausgabe-Hook geschrieben, der mit einer Chunk-Option arbeitet, output.lines= und akzeptiert eine einzelne Zahl, n, was bedeutet, nur Zeilen 1:n zu drucken, so wie head() :

%Vor%

Ich habe versucht, dies zu verallgemeinern, um einen (fortlaufenden) Vektor von Zeilennummern zu akzeptieren, wie es unten gezeigt wird, aber es scheint nicht so zu sein Arbeit und ich kann nicht sagen, warum. Es ist auch nicht so allgemein, wie ich es möchte, weil die Weitergabe von output.lines=1:12 nur Linien 1:12 ... drucken sollte, und wie die Option echo= , wäre es nett, output.lines = -1:3 zu verwenden, um ... zu erhalten. gefolgt von allen übrigen Zeilen.

%Vor%

Ich denke, das ist ein allgemeineres Problem als nur meines, also wäre das vielleicht eine willkommene Ergänzung zu knitr.

-Michael

    
user101089 16.04.2014, 16:06
quelle

2 Antworten

5

Ich sehe nicht, warum es auch nicht funktionieren sollte. Thell wies auf einen Fehler im obigen Kommentar hin ( -1:3 sollte -(1:3) sein), was der Grund sein könnte. Ansonsten funktioniert es gut für mich:

%Vor%

    
Yihui Xie 18.04.2014 04:50
quelle
4

Thells Kommentar und Yihuis Testfall erlaubten mir, dies etwas zu verallgemeinern, so dass es nun genau das macht, was ich will.

Insbesondere funktioniert output.lines=1:12 genauso wie output.lines=12 und lässt die ursprüngliche ... aus. Ähnlich für Der Fall von output.lines=-(1:8) , der das anfängliche ... druckt, aber es auslässt, wenn die letzte Zeile in der Bereich.

Dies entspricht nun meinen Bedürfnissen und könnte für andere ausreichend nützlich sein, um sie als neue Knitroch-Option hinzuzufügen. Vom Design-Standpunkt aus gesehen, ist das einzige, was geändert werden kann, nur den Bereich der gewünschten Zeilen zu liefern, z.B. output.lines=c(1,8) oder output.lines=-c(1,8) , da es sehr unordentlich und möglicherweise verwirrend wäre, die ... s in nicht aufeinanderfolgenden Zeilenauswahlen zu berücksichtigen.

ZB mit der aktuellen Funktion wird output.lines=sample(1:15,10) funktionieren und tatsächlich etwas Nützliches für einen Chunk tun das druckt einen Datenrahmen ähnlich wie some(iris) aus dem car -Paket. Aber wenn ich das will, benutze ich some() direkt. Dieser Ausgabehaken dient nur dazu, einen Zeilenbereich aus gedruckten Ausgaben einer Funktion auszuwählen, die zu lang ist nützlich in einem gedruckten Dokument enthalten, oder wenn Sie die Aufmerksamkeit nur auf einen Teil der Ausgabe konzentrieren und anzeigen möchten dass einige Zeilen weggelassen wurden.

%Vor%     
user101089 21.04.2014 20:49
quelle

Tags und Links