2015-12-01 4 views
18

Ich habe ähnliche Fragen zu Stack Overflow, aber praktisch keine schlüssigen Antworten, und sicherlich keine Antwort, die für mich funktionierte.Wie verwendet man Objekte aus der globalen Umgebung in Rstudio Markdown

Der einfachste Weg, um Objekte (Regressionsanpassungen, Datenrahmen, andere Objekte), die sich in der globalen R-Umgebung befinden, im Markdown-Skript (Rstudio) zu verwenden.

Ich finde es überraschend, dass es keine einfache Lösung dafür gibt, angesichts der Tendenz des RStudio-Teams, Dinge bequem und effektiv zu machen.

Vielen Dank im Voraus.

+0

Wie verarbeiten Sie Ihre RMarkdown-Datei? Durch Drücken der Schaltfläche 'HTML stricken' oder durch Ausführen eines Befehls 'stricken' irgendwo? – arvi1000

+0

Ich drücke "HTML stricken" - könnte das das Problem sein? –

+0

Yup. Siehe die Antwort unter – arvi1000

Antwort

21

Für besser oder schlechter ist diese Unterlassung beabsichtigt. Indem Sie sich auf Objekte verlassen, die außerhalb des Dokuments erstellt wurden, wird Ihr Dokument weniger reproduzierbar. Wenn Ihr Dokument also Daten in der globalen Umgebung benötigt, können Sie nicht nur die Dokumente und Dateien neu erstellen es selbst.

Aus diesem Grund, und um das Rendern im Hintergrund durchzuführen, erstellt RStudio tatsächlich eine separate R-Sitzung, um das Dokument zu rendern. Diese Hintergrund-R-Sitzung kann keine der Umgebungen in der interaktiven R-Sitzung sehen, die Sie in RStudio sehen.

Der beste Weg, um dieses Problem zu umgehen, ist den Code zu nehmen, den Sie zum Erstellen der Inhalte Ihrer globalen Umgebung verwendet haben und ihn in Ihr Dokument verschieben (Sie können echo = FALSE verwenden, wenn Sie nicht möchten, dass er im Dokument angezeigt wird) . Dies macht Ihr Dokument unabhängig und reproduzierbar.

Wenn Sie das nicht können, gibt es ein paar Ansätze, die Sie die Daten in der globalen Umwelt nehmen kann direkt zu verwenden:

  1. Anstelle der Knit HTML button, geben Sie rmarkdown::render("your_doc.Rmd") bei die R-Konsole. Dies wird in der aktuellen Sitzung anstelle einer Hintergrundsitzung gestrickt. Alternativ:

  2. Speichern Sie Ihre globale Umgebung in eine .Rdata-Datei vor dem Rendern (verwenden Sie die save-Funktion von R) und load es in Ihrem Dokument.

+0

Man kann auch 'knitr :: knit (" your_doc.Rmd ")' verwenden.Die R Studio "Knit HTML" -Schaltfläche verwendet entweder die rmarkdown- oder die knitr-Engine, je nach Voreinstellungen, und sie können sich in einigen Fällen etwas anders verhalten. – arvi1000

+0

Aber was ist, wenn ich nicht immer den ganzen Code wiederholen will "stricken"? Da meine Datensätze groß sind (mehrere Millionen Zeilen,> 200 Variablen), wird der Code wirklich zeitaufwändig sein. Kann der Markdown überspringen, einige der Chunks erneut reaktivieren? Ich habe solch ein Argument nämlich nicht gefunden. –

+3

Problem gelöst (cache.lazy = T). Danke euch beiden. –

1

Ich habe das gleiche Problem selbst. Einige Sachen sind ziemlich zeitaufwendig, um jedes Mal zu reproduzieren.

Ich denke, es könnte eine andere Antwort geben. Was passiert, wenn Sie Ihre Umgebung mit der save.image() Funktion in einer anderen Datei als der Standard .Rdata speichern. Dann bring es zurück mit load().

sicher sein, Sie die gleichen Daten arbeiten, verwenden Sie die md5sum() von Tools.

Prost, Kabel

Verwandte Themen