web-dev-qa-db-fra.com

Comment utiliser des objets de l'environnement global dans Rstudio Markdown

J'ai vu des questions similaires sur Stack Overflow mais pratiquement aucune réponse concluante, et certainement aucune réponse qui a fonctionné pour moi.

Quelle est la manière la plus simple d'accéder et d'utiliser des objets (ajustements de régression, trames de données, autres objets) qui se trouvent dans l'environnement R global dans le script Markdown (Rstudio).

Je trouve surprenant qu'il n'y ait pas de solution facile à cela, étant donné la tendance de l'équipe RStudio à rendre les choses confortables et efficaces.

Merci d'avance.

34
Adam Robinsson

Pour le meilleur ou pour le pire, cette omission est intentionnelle. S'appuyer sur des objets créés en dehors du document rend votre document moins reproductible - c'est-à-dire que si votre document a besoin de données dans l'environnement mondial, vous ne pouvez pas simplement donner à quelqu'un (ou à vous-même dans deux ans) le document et les fichiers de données et les laisser recréer eux-mêmes.

Pour cette raison, et afin d'effectuer le rendu en arrière-plan, RStudio crée en fait une session R distincte pour rendre le document. Cette session R d'arrière-plan ne peut voir aucun des environnements de la session R interactive que vous voyez dans RStudio.

La meilleure façon de contourner ce problème est de prendre le code que vous avez utilisé pour créer le contenu de votre environnement global et de le déplacer dans votre document (vous pouvez utiliser echo = FALSE Si vous ne voulez pas qu'il apparaisse dans le document ). Cela rend votre document autonome et reproductible.

Si vous ne pouvez pas le faire, il existe quelques approches que vous pouvez adopter pour utiliser directement les données dans l'environnement global:

  1. Au lieu d'utiliser le bouton Knit HTML , tapez rmarkdown::render("your_doc.Rmd") sur la console R. Cela sera tricoté dans la session en cours au lieu d'une session d'arrière-plan. Alternativement:

  2. Enregistrez votre environnement global dans un fichier .Rdata avant le rendu (utilisez la fonction save de R) et load it dans votre document.

40
Jonathan

Je pense que j'ai résolu ce problème en faisant référence au package explicitement dans le code qui est tricoté. En utilisant le package yarrr , par exemple, j'ai chargé la trame de données "pirates" en utilisant data(pirates). Cela a bien fonctionné sur la console et dans un bloc de code Rstudio, mais avec knitr, il n'a pas suivi le modèle de la question ci-dessus. Si, cependant, j'ai chargé les données en mémoire en créant un objet à l'aide de pirates <- yarrr::pirates, le document a ensuite été tricoté proprement au format HTML.

1
invertdna

J'ai moi-même le même problème. Certaines choses prennent beaucoup de temps à reproduire à chaque fois.

Je pense qu'il pourrait y avoir une autre réponse. Que faire si vous enregistrez votre environnement avec la fonction save.image() dans un fichier différent de celui standard .Rdata. Ensuite, ramenez-le avec load().

Pour être sûr que vous utilisez les mêmes données, utilisez les outils md5sum() de .

Santé, Corde

1
Cordura21

En allant dans les "Outils" et les "Options globales" de RStudio et en visitant l'onglet "R Markdown", vous pouvez faire une sélection dans "Evaluate chunks in directory", sélectionnez l'option "Documents" et le moteur de tricotage R Markdown sera accéder à l'environnement global comme le fait le code R simple. J'espère que cela aide ceux qui recherchent cette information!

1
Patrik_P