2015-12-01 7 views
18

Ho visto domande simili su Stack Overflow ma praticamente nessuna risposta conclusiva, e certamente nessuna risposta che ha funzionato per me.Come utilizzare gli oggetti dall'ambiente globale in Rstudio Markdown

Qual è il modo più semplice per accedere e utilizzare oggetti (adattamenti di regressione, frame di dati, altri oggetti) che si trovano nell'ambiente R globale nello script Markdown (Rstudio).

Trovo sorprendente che non vi sia una soluzione semplice a questo, data la tendenza del team RStudio a rendere le cose comode ed efficaci.

Grazie in anticipo.

+0

Come si elabora il file RMarkdown? Premendo il pulsante "knit HTML" o eseguendo un comando 'knit' da qualche parte? – arvi1000

+0

Spingo "maglia HTML": potrebbe essere questo il problema? –

+0

Sì. Vedere la risposta sotto – arvi1000

risposta

21

Nel bene o nel male, questa omissione è intenzionale. Affidarsi a oggetti creati al di fuori del documento rende il tuo documento meno riproducibile - cioè, se il tuo documento ha bisogno di dati nell'ambiente globale, non puoi semplicemente dare a qualcuno (o te stesso in due anni) i documenti e i file di dati e lasciarli ricreare loro stessi

Per questo motivo, e per eseguire il rendering in background, RStudio crea effettivamente una sessione R separata per il rendering del documento. Quella sessione R in background non può vedere nessuno degli ambienti nella sessione R interattiva che vedi in RStudio.

Il modo migliore per risolvere questo problema è prendere il codice utilizzato per creare i contenuti del proprio ambiente globale e spostarlo all'interno del documento (è possibile utilizzare echo = FALSE se non si desidera che venga visualizzato nel documento) . Ciò rende il tuo documento autonomo e riproducibile.

Se non è possibile fare questo, ci sono alcuni approcci che si possono adottare per utilizzare i dati nel contesto globale direttamente:

  1. Invece di usare il pulsante Knit HTML, tipo rmarkdown::render("your_doc.Rmd") a la console R. Questo verrà creato nella sessione corrente anziché in una sessione in background. In alternativa:

  2. Salvare l'ambiente globale in un file .Rdata prima del rendering (utilizzare la funzione R save) e load nel documento.

+0

Si può anche usare 'knitr :: knit (" your_doc.Rmd ")'.Il pulsante "Knit HTML" di R Studio potrebbe utilizzare sia rmarkdown che il motore knitr, a seconda delle impostazioni delle preferenze, e in alcuni casi possono comportarsi in modo leggermente diverso – arvi1000

+0

ma se non si desidera rieseguire il codice ogni volta "maglia"? Poiché i miei set di dati sono di grandi dimensioni (diverse milioni di righe,> 200 variabili), quindi rieseguire il codice richiederà molto tempo. Markdown può saltare re-reunning alcuni dei pezzi? Non ho trovato un argomento del genere, vale a dire. –

+3

risolto (cache.lazy = T). grazie a tutti e due –

1

Ho lo stesso problema io stesso. Alcune cose richiedono molto tempo per essere riprodotte ogni volta.

Penso che ci potrebbe essere un'altra risposta. Cosa succede se si salva l'ambiente con la funzione save.image() in un file diverso rispetto allo standard .Rdata. Quindi, riportalo con load().

per essere sicuri che si sta utilizzando gli stessi dati, utilizzare i md5sum() da strumenti.

Cheers, Cavo

Problemi correlati