Frage

Ich habe vor einiger Zeit mit Sweave. Doch wie die meisten Leute traf ich ziemlich bald ein großes Problem: Geschwindigkeit. ein großes Dokument Sweaving dauert ewig zu laufen, die sehr anspruchsvoll effizientes Arbeiten macht. Datenverarbeitung kann mit cacheSweave sehr beschleunigt werden. Allerdings Plots - vor allem ggplot;) - immer noch zu lange dauern zu machen. Dass die Art und Weise möchte ich pgfSweave verwenden.

Nach vielen, vielen Stunden gelang es mir schließlich die Einsetzung einer Arbeitssystem mit Eclipse / StatET / Texlipse auf. Ich wollte dann einen vorhandenen Bericht zu Verwendung mit pgfSweave und hatte eine schlechte Überraschung konvertieren: die meisten meiner ggplots nicht mehr zu funktionieren scheint. Die folgende Handlung zum Beispiel funktioniert perfekt in der Konsole und Sweave:

pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)

es mit pgfSweave Rennen, aber ich diesen Fehler:

Error in if (width > 0) { : missing value where TRUE/FALSE needed
In addition: Warning message:
In if (width > 0) { :
  the condition has length > 1 and only the first element will be used
Error in driver$runcode(drobj, chunk, chunkopts) : 
  Error in if (width > 0) { : missing value where TRUE/FALSE needed

Wenn ich entfernen aes (...) aus geom_point, die Handlung funktioniert perfekt mit pgfSweave.

pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point()
print(pl)

Edit: Ich untersuchte mehr in das Problem und konnte das Problem auf die tikz-Vorrichtung reduzieren.

Das funktioniert ganz gut:

quartz()
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)

Dies gibt den obigen Fehler:

tikz( 'myPlot.tex',standAlone = T )
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
dev.off()

Das funktioniert ganz gut auch:

tikz( 'myPlot.tex',standAlone = T )
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point()
print(pl)
dev.off()

Das konnte ich wiederholen mit 5 verschiedenen ggplots. Wenn nicht die Farbe (oder Größe, alpha, ...) in der Abbildung, es funktioniert mit tikz.

Q1: Hat jemand irgendwelche Erklärungen für dieses Verhalten?

Zusätzlich Cachen von nicht-Plot Code Brocken nicht funktioniert sehr gut. Der folgende Code Chunk dauert keine Zeit überhaupt mit Sweave. Mit pgfSweave, dauert es etwa 10 Sekunden.

<<plot.opts,echo=FALSE,results=hide,cache=TRUE>>=
#colour and plot options are globally set
pal1 <- brewer.pal(8,"Set1")
pal_seq <- brewer.pal(8,"YlOrRd")
pal_seq <- c("steelblue1","tomato2")
opt1 <- opts(panel.grid.major = theme_line(colour = "white"),panel.grid.minor = theme_line(colour = "white"))
sca_fill_cont_opt <- scale_fill_continuous(low="steelblue1", high="tomato2")
ory <- geom_hline(yintercept=0,alpha=0.4,linetype=2) 
orx <- geom_vline(xintercept=0,alpha=0.4,linetype=2)
ts1 <- 2.3
ts2 <- 2.5
ts3 <- 2.8
ps1 <- 6
offset_x <- function(x,y) 0.15*x/pmax(abs(x),abs(y))
offset_y <- function(x,y) 0.05*y/pmax(abs(x),abs(y))
plot_size <- 50*50

Dies scheint ein ziemlich seltsames Verhalten wie auch, da nur einige Variablen für die spätere Verwendung eingestellt.

Q2: Hat jemand irgendwelche Erklärungen für die

?

Q3: Allgemeiner gesagt, würde Ich mag fragen, ob jemand überhaupt pgfSweave erfolgreich verwendet? Mit erfolgreich meine ich, dass alle Dinge, die Arbeit in Sweave auch Arbeit in pgfSweave, mit dem zusätzlichen Vorteile, schöner Schriften und verbesserter Geschwindigkeit. ;)

Vielen Dank für Antworten!

War es hilfreich?

Lösung

  

Q1: Hat jemand irgendwelche Erklärungen für dieses Verhalten hat

Dies sind drei Gründe, warum tikzDevice einen Fehler gibt, wenn Sie Ihre Handlung zu konstruieren:

  • Wenn Sie eine ästhetische Abbildung hinzufügen, die eine Legende, wie aes(colour=que_id) schafft, ggplot2 wird den Variablennamen als Titel der Legende verwenden --- in diesem Fall que_id.

  • Die tikzDevice gibt alle Saiten, wie Legende Titel, LaTeX für den Satz.

  • In LaTeX den Unterstrich, _, verwendet, um einen Index zu bezeichnen. Wenn ein Unterstrich verwendet außerhalb des Mathematik-Modus ist, verursacht es einen Fehler.

Wenn die tikzDevice versucht, die Höhe und die Breite des Legende Titel zu berechnen, „que_id“, geht es um die Zeichenfolge zu LaTeX für Satz- und erwartet LaTeX die Breite und Höhe des Strings zurück. LaTeX leidet einen Fehler, da ein unescaped Strich in der Zeichenfolge außerhalb von mathmode verwendet wird. Die tikzDevice erhält eine NULL für die Zeichenfolge Breite statt einer Zahl, die eine if (width > 0) Prüfung fehlschlagen verursacht.

Möglichkeiten, das Problem zu vermeiden

  1. Geben Sie eine Legende Titel Verwendung durch eine Farbskala hinzufügen:

    p1 <- ggplot(plot_info, aes(elevation, area))
    p1 <- p1 + geom_point(aes(colour=que_id))
    
    
    # Add a name that is easier for humans to read than the variable name
    p1 <- p1 + scale_colour_brewer(name="Que ID")
    
    
    # Or, replace the underscore with the appropriate LaTeX escape sequence
    p1 <- p1 + scale_colour_brewer(name="que\\textunderscore id")
    
  2. Verwenden Sie die Zeichenfolge sanitization Feature eingeführt in tikzDevice 0.5.0 (aber bis 0.5.2 gebrochen wurde). Derzeit wird Zeichenfolge sanitization nur entkommen die folgenden Zeichen: %, $, {, } und ^ standardmäßig. Sie können jedoch zusätzliche Substitution Paare über die tikzSanitizeCharacters und tikzReplacementCharacters Optionen angeben:

    # Add underscores to the sanitization list
    options(tikzSanitizeCharacters = c('%','$','}','{','^', '_'))
    options(tikzReplacementCharacters = c('\\%','\\$','\\}','\\{',
      '\\^{}', '\\textunderscore'))
    
    
    # Turn on string sanitization when starting the plotting device
    tikz('myPlot.tex', standAlone = TRUE, sanitize = TRUE)
    print(p1)
    dev.off()
    

Wir veröffentlichen Version 0.5.3 des tikzDevice in den nächsten paar Wochen, um einige lästige Warnmeldungen zu adressieren, die jetzt aufgrund von Änderungen in der Art und Weise R Griffe system() zeigen. Ich werde die folgenden Änderungen an dieser nächsten Version hinzufügen:

  • Bessere Warnmeldung, wenn width NULL zeigt an, dass es wahrscheinlich mit Plot Text etwas nicht in Ordnung ist.

  • In Unterstrichen und ein paar anderen Zeichen auf den Standardzeichensatz, dass die Zeichenfolge Sanitizer sucht nach.

Hope, das hilft!

Andere Tipps

Q2: Ich bin der Maintainer von pgfsweave

.

Hier sind die Ergebnisse eines Tests I ran:

time R CMD Sweave time-test.Rnw 

real    0m1.133s
user    0m1.068s
sys     0m0.054s

time R CMD pgfsweave time-test.Rnw 

real    0m2.941s
user    0m2.413s
sys     0m0.364s

time R CMD pgfsweave time-test.Rnw 

real    0m2.457s
user    0m2.112s
sys     0m0.283s

Ich glaube, das gibt es 2 Gründe für die Zeitdifferenz, aber es würde mehr Arbeit nimmt sie genau zu überprüfen:

  • pgfSweave hat eine Tonne Prüfung und der doppelten Kontrolle, um sicherzustellen, dass es nicht teuer Berechnungen wird redoing. Ziel ist es, es möglich zu machen teurer Berechnungen und die grafische Darstellung in einem Dokument zu tun. Die Skala der „teuer“ ist in diesem Fall viel mehr als die zusätzliche Sekunde oder zwei Kontrollen zu tun.

Als ein Beispiel für das Caching beachten Sie die folgende Testdatei die wirklichen Vorteile von Caching, um zu sehen:

\documentclass{article}

\begin{document}

<<plot.opts,cache=TRUE>>=
x <- Sys.sleep(10)
@

\end{document}

Und die Ergebnisse:

time R CMD Sweave time-test2.Rnw 

real    0m10.334s
user    0m0.283s
sys     0m0.047s

time R CMD pgfsweave time-test2.Rnw 

real    0m12.032s
user    0m1.356s
sys     0m0.349s

time R CMD pgfsweave time-test2.Rnw 

real    0m1.423s
user    0m1.121s
sys     0m0.266s
  • hat Sweave erfahren haben einige Änderungen in R 2.12. Die Änderungen haben den Prozess der Code Chunk Auswertung beschleunigt und links pgfSweave hinter für diese kleineren Berechnungen. Lohnt ein Blick in

Q3: Ich benutze pgfSweave mich die ganze Zeit für meine eigene Arbeit. Es gab einige Änderungen in Sweave in R 2.12, die einige kleinere Probleme mit pgfSweave verursacht wurden, aber eine neue Version ist in Vorbereitung, dass behebt alles. Die Entwicklungsversion auf Github ( https://github.com/cameronbracken/pgfSweave ) hat bereits die Änderungen. Wenn Sie weitere Probleme haben, würde ich Ihnen gerne behilflich sein.

Q2: Haben Sie \pgfrealjobname{<DOCUMENTNAME>} im Header und Option external=TRUE für die Grafik-Stücke verwenden? Ich habe festgestellt, dass die Geschwindigkeit viel erhöht (nicht für die erste Compilation, aber für nachfolgend diejenigen, wenn die Grafiken sind unverändert). Sie werden mehr Hintergrund in der pgfSweave Vignette finden.

Q3: Alles funktioniert gut für mich, ich benutze Windows-+ Eclipse / StatEt / Texlipse wie Sie

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top