2015-10-21 16 views
26

Ich habe ein R Abschlags Dokument wie folgt aus:Loop in R Abschlags

The following graph shows a histogram of variable x: 

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

ich eine Schleife einführen wollen, so kann ich für mehrere Variablen das gleiche tun. Etwas hypothetisch wie folgt:

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

Ist das überhaupt möglich?

PS: Der größere Plan ist, ein Programm zu erstellen, das über einen Datenrahmen gehen würde und automatisch entsprechende Zusammenfassungen für jede Spalte erzeugt (z. B. Histogramm, Tabellen, Boxplots usw.). Das Programm kann dann verwendet werden, um automatisch ein Abschriften-Dokument zu generieren, das die explorative Analyse enthält, die Sie durchführen würden, wenn Sie Daten für die ersten Daten sehen.

+0

Sie könnten mehrere Plots innerhalb eines Chunks erzeugen. Könnten Sie erklären, was die Gründe für Ihre Lösung sind, im Gegensatz zu einer Schleife innerhalb eines Chunks, die mehrere Plots erzeugt? – akhmed

+1

Ich kam für die gleiche Frage hierher. Mein Grundprinzip besteht darin, mehrere Versionen eines RMarkdown-Berichts zu erstellen. Die Berichte werden die Antwort für eine Übung sein, die meinen Schülern gegeben wird, aber da jeder mit unterschiedlichen Daten arbeitet, möchte ich die Berichte für jeden Schüler personalisieren. Die akzeptierte Antwort kann nützlich sein, aber es wäre besser, Markdown innerhalb der Schleife zu haben, Markdown-Funktionen wie Beschriftungen, Formeln, Formatierung und so zu verwenden. – Pere

Antwort

26

Könnte das sein, was Sie wollen?

Diese Antwort wurde mehr oder weniger von here gestohlen.

+0

Es war mir (zumindest für mich) nicht klar aus der anderen Antwort, dass dies in Markdown gemacht werden könnte, ohne zuerst eine R-Datei zusammenfügen zu müssen. Schön zu sehen, dass ich jetzt nur bei RMarkdown bleiben kann. –

+0

Für mich erscheinen die beiden Überschriften vor beiden Grafiken. – Nova

+0

Ich führe diesen Code mit der aktuellen Paketversion erneut aus. Für mich funktioniert es immer noch. Haben Sie den Beispielcode in irgendeiner Weise geändert? – Alex

1

Wie bereits erwähnt, muss jede Schleife in einem Code-Chunk sein. Es könnte einfacher sein, dem Histogramm einen Titel zu geben, anstatt eine Textzeile als Kopfzeile für jede Zeile hinzuzufügen.

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

Wenn Sie jedoch mehrere Berichte erstellen möchten dann schauen Sie this thread.

die auch einen Link zu this example.
hat es scheint, wenn der Render Anruf von innerhalb eines Scrip gemacht wird, werden die Umgebungsvariablen kann an die Rmd-Datei übergeben werden.

So könnte eine Alternative sein, Ihre R Skript haben:

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

Haftungsausschluss:

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

Und dann Rmd Brocken aussehen würde ich nicht getestet haben.