2017-05-26 2 views
0

J'ai un workflow important et compliqué (beaucoup d'entrées initiales, recodage, fusion, observations perdues, etc.) dans R et je le fais dans de nombreuses fonctions spécifiques à chaque entrée type, chaque opération de fusion et de manipulation de données, etc. À l'heure actuelle, seul le «jeu de données d'analyse» final est renvoyé dans l'environnement global. Cependant, je veux écrire un document qui documente le processus d'assemblage de données, mais tous les différents objets (trames de données/tibbles) sont locaux aux fonctions dans lesquelles ils sont assemblés, ce que je considère comme une bonne pratique.Rédaction d'un document lorsque la fusion de données se produit dans les fonctions

Les options semblent être:

  • je pourrais générer beaucoup d'objets de données provisoires pour l'environnement mondial, mais cela encombre l'environnement mondial, que je voudrais garder propre

  • Je pourrais renvoyer des listes d'attributs intéressants (N, fusionner les informations de réussite, les structures, etc.) de la fonction vers l'environnement global. Un peu plus soigné, mais pas complètement efficace.

Ceci est clairement maintenant un nouveau problème. Je serais heureux de recevoir des suggestions sur les meilleures façons de procéder.

Répondre

0

Renvoyez des objets avec un attribut de classe et définissez une méthode d'impression pour ces classes. Dans le document principal, imprimez les objets. C'est l'approche R standard à ce problème.

1

Avez-vous envisagé d'utiliser knitr::spin? Trois types de commentaires sont utilisés pour définir la manière dont le fichier de fin sera rendu.

  1. # une norme R commentaire
  2. #' au début de la ligne génèrera le démarquage
  3. #+ options de gros morceau

En écrivant votre script de données assembly.R puis appeler knitr::spin("data-assembly.R") Un fichier .html générera les informations nécessaires.

Exemple de fichier de données assembly.R:

#' # Data Assembly Process 
#' This document provides details on the construction of the final analysis data 
#' set. 
#' 
#' The namespaces needed for this work are: 
#+ message = FALSE 
library(tidyverse) 

#' Our first step is to read in the data sets. For this example, we'll just use 
#' the `mtcars` data set 
mtcars 

#' A summary of the `mtcars` data set is below 
summary(mtcars) 

#' Let's only use data records for cars with automatic transmissions 
mt_am_cars <- dplyr::filter(mtcars, am == 1) 
mt_am_cars 
+0

Hmm. J'ai cassé l'entrée dans de nombreuses petites fonctions (comme un "devrait"), et je suis réticent à retirer toute la fonction. Je pense que je devrais retourner certains objets à l'environnement appelant, ou retourner au moins une liste qui est animée avec des informations sur les fichiers d'entrée (nombre d'enregistrements, horodatages, etc.) Une fois que ces objets sont retournés sous forme de liste dans l'environnement d'appel, je peux les intégrer dans mes rapports. Je pense que c'est la solution. Je vais poster un exemple de travail dans un jour ou deux, juste pour conclure ce sujet. – user2292410