2015-10-29 1 views
1

Je travaille sur un document RMarkdown qui utilise des objets longs à créer et à transformer. La syntaxe est similaire à ceci:Eviter la création répétée d'objets dans le document RMarkdown via l'instruction if

--- 
title: "Example" 
author: "Test" 
date: "October 29, 2015" 
output: pdf_document 
--- 

Example 

```{r} 
test_exc <- "NO" 
if(exists("some_dta") == FALSE) { 
    set.seed(1) 
    # This data is big and messy to transform and I don't want to do it twice 
    some_dta <- data.frame(speed=runif(n = 1000),nonsense=runif(1000)) 
    test_exc <- "YES" 
} 
``` 

You can also embed plots, for example: 

```{r, echo=FALSE} 
plot(some_dta) 
``` 

Was the code executed: `r test_exc` 

Comme suggéré dans le code ci-dessus, je voudrais éviter l'exécution répétée du code if(exists("some_dta") == FALSE) { ... }. Comme cela est illustré dans le code ci-dessous le code dans la boucle exécute:

Markdown results

Je voudrais savoir s'il y a un moyen de forcer rstudio démarquage mécanisme de création de comprendre que je les objets existent quelque part et il n'est pas nécessaire de les créer à nouveau.

Répondre

2

Vous pouvez utiliser la mise en cache, comme décrit dans the online knitr documentation, par exemple:

--- 
title: "Example" 
author: "Test" 
date: "October 29, 2015" 
output: pdf_document 
--- 

Example 

```{r chunk1,cache=TRUE} 
    set.seed(1) 
    # This data is big and messy to transform and I don't want to do it twice 
    some_dta <- data.frame(speed=runif(n = 1000),nonsense=runif(1000)) 
} 
``` 
2

Vous pouvez sauvegarder vos données sur un objet .rds puis exécutez une vérification pour voir si ce fichier existe

```{r} 
if(!file.exists("some_dta.rds")) { 
    set.seed(1) 
    # This data is big and messy to transform and I don't want to do it twice 
    some_dta <- data.frame(speed=runif(n = 1000),nonsense=runif(1000)) 
    saveRDS(some_dta, file='some_dta.rds') 
} else { 
    some_dta <- readRDS('some_dta.rds') 
} 
``` 
+0

Merci de votre intérêt. J'utilise beaucoup les fichiers '.rds'. Idéalement, je ne voudrais pas en créer beaucoup, aussi je lierais des partages réseau dans ce fichier donc pousser des fichiers massifs à travers le réseau n'aide pas la vitesse. – Konrad

+1

@Konrad Vous voulez donc tirer des objets actuellement stockés en mémoire depuis votre session de console? [Voir cette question] (http://stackoverflow.com/questions/11155182/is-there-a-way-to-knitr-markdown-straight-out-of-your-workspace-using-rstudio). – DunderChief

+0

La lecture d'objets déjà chargés dans l'environnement global serait la solution idéale. Je pourrais alors les modifier facilement et éviter de les recréer lors de la compilation du document. L'option de cache fonctionnera mais être capable de charger à partir de l'environnement global serait idéal. – Konrad