Come catturare R testo+immagine di output in un file (html, doc, pdf, ecc)?

Il compito è quello di creare un file (word, rtf, pdf, html, o quello che è) che cattura l’output di R (e.g: non il codice che ha creato l’uscita), in che formato (compreso il testo e immagini).

Il modo di fare questo dovrebbe comportare come un piccolo cambiamento alla originale R script come possibile.

Se avessi curato solo per il testo o le immagini, quindi vorrei utilizzare ?lavandino, o ?pdf. Ma non so come combinare i due in uno di uscita, in modo semplice.

So che c’è un modo per esportazione R output utilizzando r2wd, ma coinvolge troppo conquistare la medaglia nel codice originale per i miei gusti (immagino lo stesso vale per i driver soluzione, anche se non ho esperienza per dire)

Ecco un codice di esempio per le future esempi:

START.text.and.image.recording("output.file") # this is the function I am looking for
x <- rnorm(100)
y <- jitter(x)
print(summary(x))
print(head(data.frame(x,y)))
cor(x,y)
plot(x,y)
print(summary(lm(y~x)))
STOP.text.and.image.recording("output.file") # this is the function I am looking for

Aggiornamento: mi è stato chiesto di modo non Driver, o altre opzioni da ReproducibleResearch compito di vista.

I motivi sono:

  1. Non ho (ancora) sapere Lattice
  2. Anche sapendo di Lattice, voglio qualcosa con semplici impostazioni predefinite per semplicemente dump di tutte le uscite insieme e in ordine. “semplicemente” significa – come piccolo extra codice/gestione file in testa il più possibile.

Ho capito che qualcosa di simile a driver o brew sono più scalabili, ma sto cercando di vedere se c’è un “semplice” soluzione per piccoli progetti/script.

InformationsquelleAutor Tal Galili | 2010-09-28



11 Replies
  1. 13

    2012 knitr fornisce una soluzione perfetta per questo problema.

    Per esempio, creare un file con un rmd estensione. Avvolgere il tuo codice in un paio di comandi come segue:

    ```{r}
    x <- rnorm(100)
    y <- jitter(x)
    print(summary(x))
    print(head(data.frame(x,y)))
    cor(x,y)
    plot(x,y)
    print(summary(lm(y~x)))
    ```

    Si può convertire in un file HTML autonomo in diversi modi. In RStudio basta premere un solo pulsante Knit HTML.
    Questo è il File HTML prodotto, davvero vista come l’HTML viene visualizzato in un browser, salvare il file e aprirlo.

    Immagini di codice e di uscita sono inclusi, come ci si potrebbe aspettare.

    Naturalmente, è possibile e in genere vorresti dividere il file in più R pezzi di codice. Ma il punto è che non è necessario.

    Qui ci sono un altro paio di esempi che ho creato:

  2. 4

    Se si conosce il Lattice, il driver sarà probabilmente la vostra scommessa migliore. odfWeave è un meccanismo simile, ma per incorporare il codice in un OpenOffice.org file. Per l’HTML c’è il R2html pacchetto. Ma tutti saranno probabilmente richiede di rompere il codice un po ‘ per ottenere il meglio dei sistemi. In alternativa, i tuoi driver/odfweave/html template potrebbe sorgente la generazione dei dati aspetti dello script in un unico pezzo di codice, con il display di uscita (print() dichiarazioni) posto dove richiesto. La grafica potrebbe essere chiamato anche all’interno dello script per produrre le figure di incorporare nel documento come file separati, che dovrete quindi inserire a mano nel modello.

    Per esempio (e questo non è un pieno .Rnw file per l’esecuzione attraverso sweave) in un driver file che avevo messo qualcosa di simile a questo alto del modello che le fonti principali di ricerca script che farà l’analisi e generare la R oggetti:

    <<run_script, eval=TRUE, echo=FALSE, results=hide>>=
    source("my_script.R")
    @

    Allora si avrà bisogno di inserire pezzi di codice in cui si desidera che la stampa di uscita:

    <<disp_output, eval=TRUE, echo=FALSE, results=verbatim>>=
    ## The results=verbatim is redundant as it is the default, as is eval=TRUE
    print(summary(x)) ## etc
    @

    Allora si avrà bisogno di pezzi di inserire le cifre.

    Separare il vostro codice di analisi dell’output (stampa e/o figure) è probabilmente una buona pratica, soprattutto se l’analisi codice prezzo, a calcolare i termini. È possibile eseguire una volta o anche in cache – mentre l’aggiornamento di uscita/display il codice necessario.

    Esempio Driver Di File

    Utilizzando csgillespie esempio driver di file vorrei impostare le cose come questo. Prima il my_script.R file contenente il nucleo di analisi codice:

    x <- rnorm(100)
    y <- jitter(x)
    corXY <- cor(x,y)
    mod.lm <- lm(y~x)

    Quindi il Driver file

    \documentclass[12pt]{article}
    \usepackage{Sweave}
    \begin{document}
    
    An introduction
    <<run_analysis, eval=TRUE,echo=FALSE, results=hide>>=
    source("my_script.R")
    @
    
    % Later
    Here are the results of the analysis
    <<show_printed_output, echo=FALSE>>=
    summary(x))
    head(data.frame(x,y))
    @
    
    The correlation between \texttt{x} and \texttt{y} is:
    <<print_cor, echo=FALSE>>=
    corXY
    @
    
    Now a plot
    \begin{figure}[h]
        \centering
    <<echo=FALSE, eval=TRUE, fig=TRUE, width=6, height=4>>=
    plot(x,y)
    @ 
    \caption{\textit{A nice plot.}}
    \end{figure}
    
    \end{document}

    Quello che ti sembra di essere volendo non esiste un semplice modo per combinare R codice e l’output in un file di documento. Che è se non si considera un driver e il suo ilk semplice. Potrebbe essere necessario ripensare ciò che si vuole fare o come organizzare la vostra analisi e la grafica e il codice di uscita, ma si sono probabilmente meglio servita guardando una delle opzioni suggerite (driver, odfweave, brew, R2html).

    HTH

  3. 4

    Vi incoraggio a utilizzare Driver, ma un rudimentale funzionalità che non è abbastanza, può essere realizzato con sink().

    Un normale file txt:

    sink(file = "test.txt", type = "output")
    summary(cars)
    sink()

    o aggiungere alcuni tag HTML:

    sink(file = "tal_test.html", type = "output")
    cat("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"", "\n")
    cat("\"http://www.w3.org/TR/html4/strict.dtd\">", "\n")
            cat("<HTML>", "\n")
            cat("<HEAD>", "\n")
            cat("<TITLE>My first HTML document</TITLE>", "\n")
            cat("</HEAD>", "\n")
            cat("<BODY>", "\n")
            summary(cars)
            cat("</BODY>", "\n")
            cat("</HTML>", "\n")
    sink()
    • Come immagini automaticamente incluso?
    • con i dati schema uri, vedi la mia risposta.
  4. 3

    Ho scritto uno script chiamato Roux circa un anno fa, che fa proprio questo. Volevo essere in grado di creare HTML trascrizioni esecuzione di un R script, comprese le eventuali immagini, senza dover modificare lo script.

    Si chiama Roux dalla riga di comando, come questo:
    roux esempio.R

    e roux sarà:

    • eseguire lo script in R (che richiedono il Roux primo pacchetto automaticamente)
    • evidenziare la sintassi .Rotta di uscita utilizzando Pygments
    • inserire le immagini nella posizione corretta

    Roux pacchetto R è un piccolo pacchetto R che modifica la funzione plot() e altre funzioni per la scrittura automatica di un nome di file casuale al posto di quella predefinita grafica interattiva dispositivo.

    Ho usato un sacco di tutto questo, e funziona davvero bene per me, anche se sono sicuro che se più persone lo usano con i nuovi pacchetti quindi minori problemi sorgeranno, più probabile che avrete una diversa funzione che genera un grafico e Roux, non sanno che si dovrebbe aprire un PNG dispositivo per voi.

    Dal momento che parlare con Tal a proposito di questo ho aggiornato e migliorato il codice, e ora è qui:
    http://bitbucket.org/ananelson/roux/src

    quindi, se si esegue in eventuali problemi, si prega di segnalare il problema tracker c’su Bitbucket.

    Ho aggiunto il supporto per il Lattice trascrizioni modo è possibile creare facilmente documenti Pdf che sono la trascrizione dei R script incluse le immagini. (Si può vedere un esempio se guardi l’esempio-la directory di output, trovare il “raw” link per il download.)

    Si ha bisogno di avere Python e il Pygments libreria python installato. Se si dispone di una vecchia versione di Python e si esegue in eventuali problemi, per favore fatemelo sapere.

    Ho scritto su Roux sul mio blog, ma non pubblicizzare più di tanto perché i miei sforzi si sono concentrati su un nuovo progetto chiamato Dexy, che è inteso come un sostituto per il Driver. Se si desidera una maggiore flessibilità e controllo o che sono interessati a alfabetizzati documentazione, allora si potrebbe desiderare di check-out Dexy troppo.

  5. 2

    Che hai citato driver la tua domanda, ma non realmente, perché non è adatto. La tua domanda mi sembra perfetta per il Driver. In realtà, il codice di esempio potrebbe avere è venuto dalla seconda Driver esempio.

    Esempio Driver di file

    Se si conosce il Lattice poi Driver non è difficile. Ecco il tuo file di esempio come un Driver di file:

    \documentclass[12pt,BCOR3mm,DIV16]{scrreprt}
    \usepackage{Sweave}
    \begin{document}
    
    An introduction
    <<eval=TRUE,echo=TRUE>>=
    x <- rnorm(100)
    y <- jitter(x)
    print(summary(x))
    print(head(data.frame(x,y)))
    cor(x,y)
    @ 
    Now a plot
    \setkeys{Gin}{width=0.5\textwidth}
    \begin{figure}[h]
        \centering
    <<echo=FALSE, eval=TRUE, fig=TRUE, width=6, height=4>>=
    plot(x,y)
    @ 
    \caption{\textit{A nice plot.}}
    \end{figure}
    
    \end{document}

    Sotto linux, basta salvare il file tmp.Rnw. Quindi

    R CMD Sweave tmp.Rnw
    pdflatex tmp.tex
    • Ciao csgillespie, il codice per l’esempio che hai citato ha un sacco di “prima e dopo” integrazioni al codice (stat.uni-muenchen.de/~leisch/Driver/esempio-2.Snw), tra cui il fatto che ho bisogno di imparare (alcuni) in lattice+driver. Che è qualcosa da fare in un giorno, ma sto cercando se c’è un’alternativa più semplice.
    • Vorrei aggiungere a @csgillespie odfSweave e brew (probabilmente meno flessibile). Vedi anche Driver e Lattice, j.mp/dah7Hr.
    • Credo che si può sempre scrivere del codice (Python, Ruby o quello che è) per memorizzare R output in un file temporaneo, così come le immagini, chiamando R in modalità BATCH, e quindi compilare tutti in un file tex, dopo aver inserito il file temp. In realtà, questo è ciò che è fatto per l’incorporamento R codice nel file di Contesto.
    • Eh, mi sfogliare il tuo r2wd esempio: è una pessima idea (ok, non uso mai la Micro$oft strumenti, e il mio apprezzamento è certamente parziale)! Sono sicuro che c’è un modo migliore per gestire questo con il linguaggio di scripting Python e tex/esporta in html… chiamare per altre risposte…
    • Ciao chl, mi sembrano aver trovato una soluzione a fare quello che stai descrivendo! Si prega di dare un’occhiata alla risposta che ho appena postato. Migliori, Tal
  6. 2

    C’è anche LyX, che ha un Driver di interfaccia. R /LyX /Driver di interfaccia codice CRAN a http://cran.fhcrc.org/contrib/extra/lyx/. LyX è di per sé la maggior parte delle distribuzioni Linux. Tutta questa magia può essere fatto funzionare su Windows, ma sicuramente non banale. Su Windows, ti consiglio di Inferenza per R dal Blu di Riferimento per letterato R progamming.

  7. 2

    Bene, ricordo che stavo usando Asciidoc per breve segnalazione o la modifica di una pagina web. Ora c’è un R plugin (ascii su CRAN), che permette di incorporare R codice in asciidoc documento. La sintassi è molto simile a Markdown o Tessile, così potrai imparare molto rapidamente.

    Uscita sono in (X)HTML, Docbook, in Lattice, e, naturalmente, PDF attraverso uno degli ultimi due backend.

    Purtroppo, non credo che si può avvolgere tutto il codice in una singola istruzione. Tuttavia, supporta un gran numero di R oggetti, vedere di seguito.

    > methods(ascii)
     [1] ascii.anova*              ascii.aov*                ascii.aovlist*            ascii.cast_df*           
     [5] ascii.character*          ascii.coxph*              ascii.CrossTable*         ascii.data.frame*        
     [9] ascii.default*            ascii.density*            ascii.describe*           ascii.describe.single*   
    [13] ascii.factor*             ascii.freqtable*          ascii.ftable*             ascii.glm*               
    [17] ascii.htest*              ascii.integer*            ascii.list*               ascii.lm*                
    [21] ascii.matrix*             ascii.meanscomp*          ascii.numeric*            ascii.packageDescription*
    [25] ascii.prcomp*             ascii.sessionInfo*        ascii.simple.list*        ascii.smooth.spline*     
    [29] ascii.summary.aov*        ascii.summary.aovlist*    ascii.summary.glm*        ascii.summary.lm*        
    [33] ascii.summary.prcomp*     ascii.summary.survfit*    ascii.summary.table*      ascii.survdiff*          
    [37] ascii.survfit*            ascii.table*              ascii.ts*                 ascii.zoo*               
    
       Non-visible functions are asterisked
  8. 2

    Questo è alla luce di romunov la risposta, ma ancora. Si può semplicemente scrivere la vostra propria stampa che include la produzione in alcuni formattazione HTML e incorpora l’output in un file HTML. Lo stesso può essere fatto con le immagini, con Dati schema URI, per esempio utilizzando img funzione da base64 pacchetto R.

    • Ciao mbq, si intende per avvolgere ogni riga di codice, o per avvolgere l’intera sezione ?
    • Piuttosto una custom print e plot che formati ans reindirizzare l’output nel file di report. R non hanno alcun output handler per gancio 🙁
    • Questo non e ‘ vicino a quello che R2HTML in realtà non fa (più o meno)?
    • R2HTML è R oggetto HTML converter, Tal voluto catturare l’output testuale e solo le immagini, per, mi pare di capire, qualcosa come statico Mathematica o Salvia notebook.
    • mbq: output testuale comprende e tabelle di dati.fotogrammi/lm.sintesi e così via. È vero che l’output è in formato testo (ascii) va bene. Anche se la soluzione migliore sarebbe qualcosa di simile a R2HTML, ma senza la necessità di aggiungere tutte quelle righe di codice tutti in uscita istruzione.
    • Ok, il ascii pacchetto che ho proposto funziona lungo la stessa strada…
    • BTW, con ascii non si ottiene solo un leggibili normale file di testo, ma anche di una pagina HTML (asciidoc il formato di file txt); meno potente di Driver, ma si lavora con un file di testo, quindi…
    • Ciao chl, grazie – ascii di un pacchetto che ha un aspetto piacevole. Se ho ancora la speranza per una soluzione più semplice per i più piccoli frammenti di codice 🙂
    • La conversione è una cosa, la cattura di uscita (soprattutto immagini) è qualcosa di diverso. @Tal di Nuovo-non lo troverete, di stampa e la trama non può essere agganciato a qualsiasi basso livello abbastanza modo.
    • Sì, sono d’accordo. Questo è il motivo per cui inizialmente ho suggerito di poter contare su un esterno linguaggio di scripting per chiamare R in modalità batch; ora, se si guarda per una soluzione più semplice, non so come si può fare.

  9. 2

    È possibile utilizzare il R2HTML pacchetto per l’uscita di una sessione di html e ci sono alcune funzioni analoghe nell’ TeachingDemos pacchetto (vedi txtStart) per l’output di testo avanzate e parola (via R2wd). Non i comandi di grafica saranno inclusi nel file automaticamente e l’attuale trama può essere inserito da un unico comando.

  10. 1

    Attraverso le meraviglie di twitter, qualcuno ha raggiunto e mi ha inviato un link per questa pagina, per quanto riguarda un pacchetto chiamato “roux”. E ‘ stato creato un anno fa, e non ho mai sentito parlare (a quanto pare non avere né la maggior parte di voi).

    Questo pacchetto sembra fare esattamente quello che stavo cercando per la mia domanda, anche se l’installazione sembra non banale.

    Spero di giocare con questa soluzione e anche per vedere se altri R membri potrebbe andare in questo progetto per valorizzare al meglio la R.

    • Oh, mi sembra di ricordare che la navigazione del sito qualche tempo fa, ma definitivamente dimenticato su di esso. Mi ricorda la tecnica usata su bm2.i geni.nig.ac.jp per visualizzare completare R di uscita. Fateci sapere se si riesce a visualizzare solo l’uscita (testo+img) e non il comando R…
    • Ciao chl, ho già contattato l’autore del plugin. Spero che questo possa essere realizzato (e in realtà molto di più). Di più (spero) a venire…
    • Ciao chl, per quanto riguarda il link che hai dato, me lo dimentico. Abbastanza interessante, non risolve il problema, dato che ha tutta l’ ?lavello in uscita e poi tutti gli ?png uscita (non sono sicuro se questo è come si implementa, ma il risultato). Questo, infatti, potrebbe essere una buona idea per l’aggiornamento di un sito web.
  11. 0

    buon suggerimento da @znmeb per provare Lyx – una parola di più-come front-end per il Lattice, e la documentazione sottolinea, c’è un bell’articolo del suo utilizzo con Driver a pagina 2 di questa edizione di R news

    Questo è come ho fatto in Ubuntu 10.04 seguenti linee guida in lyx driver repository:

    sudo apt-get install lyx 
    cd ~./lyx 
    wget http://cran.fhcrc.org/contrib/extra/lyx/preferences 
    layout di cd 
    wget http://cran.fhcrc.org/contrib/extra/lyx/literate* 
    wget http://cran.fhcrc.org/contrib/extra/lyx/literate-article.layout 
    wget http://cran.fhcrc.org/contrib/extra/lyx/literate-book.layout 
    wget http://cran.fhcrc.org/contrib/extra/lyx/literate-report.layout 
    wget http://cran.fhcrc.org/contrib/extra/lyx/literate-scrap.inc 
    cd ~/texmf/tex 
    wget http://www.biostat.jhsph.edu/~rpeng/ENAR2009/Driver.sty 
    
    1. inizio Lyx
    2. Preferenze -> Riconfigurare
    3. riavviare Lyx
    4. File -> nuovo
    5. Documento -> Impostazioni -> Documento di Classe -> articolo (Driver noweb)

    link utili:

Lascia un commento