web-dev-qa-db-fra.com

Boucle dans la démarque R

J'ai un document de démarque R comme celui-ci:

The following graph shows a histogram of variable x:

```{r}
hist(x)
```

Je veux introduire une boucle, donc je peux faire la même chose pour plusieurs variables. Quelque chose d'hypothétique comme ceci:

for i in length(somelist) {
  output paste("The following graph shows a histogram of somelist[[" , i, "]]")
  ```{r}
  hist(somelist[[i]])
  ```

Est-ce que c'est possible?

PS: Le plan le plus important est de créer un programme qui passerait par-dessus une trame de données et générerait automatiquement des résumés appropriés pour chaque colonne (par exemple, histogramme, tableaux, boîtes à moustaches, etc.). Le programme peut ensuite être utilisé pour générer automatiquement un document de démarque contenant l'analyse exploratoire que vous feriez lorsque vous voyez des données pour les premières données.

39
Merik

Serait-ce ce que tu veux?

---
title: "Untitled"
author: "Author"
output: html_document
---


```{r, results='asis'}
for (i in 1:2){
   cat('\n')  
   cat("#This is a heading for ", i, "\n") 
   hist(cars[,i])
   cat('\n') 
}
```

Cette réponse a été plus ou moins volée à ici .

41
Alex

Comme déjà mentionné, toute boucle doit être dans un morceau de code. Il serait peut-être plus facile de donner un titre à l'histogramme plutôt que d'ajouter une ligne de texte comme en-tête pour chacun.

```{r}
    for i in length(somelist) {
        title <- paste("The following graph shows a histogram of", somelist[[ i ]])
        hist(somelist[[i]], main=title)
    }
```

Cependant, si vous souhaitez créer plusieurs rapports, consultez ce fil.

Qui a également un lien vers cet exemple.
Il semble que lorsque l'appel de rendu est effectué à partir d'un script, les variables d'environnement peuvent être transmises au fichier Rmd.

Une alternative pourrait donc être d'avoir votre script R:

for i in length(somelist) {
    rmarkdown::render('./hist_.Rmd',  # file 2
               output_file =  paste("hist", i, ".html", sep=''), 
               output_dir = './outputs/')
}

Et puis votre morceau Rmd ressemblerait à:

```{r}
    hist(i)
```

Avertissement: je n'ai pas testé cela.

4
Will Hore-Lacy