2015-10-21 11 views
26

Mam dokument R Przecena tak:pętli w R obniżki

The following graph shows a histogram of variable x: 

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

Chcę wprowadzić pętlę, więc mogę zrobić to samo dla wielu zmiennych. Coś hipotetycznie takiego:

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

Czy to możliwe?

PS: Większy plan polega na utworzeniu programu, który przejdzie przez ramkę danych i automatycznie wygeneruje odpowiednie podsumowania dla każdej kolumny (np. Następnie program może zostać użyty do automatycznego wygenerowania dokumentu obniżki, który zawiera analizę eksploracyjną, którą wykonasz, gdy zobaczysz dane dla pierwszych danych.

+0

Można wygenerować wiele wątków wewnątrz jednej części. Czy możesz wyjaśnić, co jest uzasadnieniem dla twojego rozwiązania, w przeciwieństwie do posiadania pętli wewnątrz jednej części, która wytwarza wiele wątków? – akhmed

+1

Przybyłem tutaj, aby uzyskać to samo pytanie. Moim uzasadnieniem jest przedstawienie kilku wersji raportu RMarkdown. Raporty będą odpowiedzią na ćwiczenie przekazane moim studentom, ale ponieważ każdy pracuje z różnymi danymi, chcę spersonalizować raporty dla każdego ucznia. Przyjęta odpowiedź może być przydatna, ale lepiej byłoby mieć w wewnętrznej pętli przecenę, aby korzystać z funkcji Markdown, takich jak napisy, formuły, formatowanie i tak dalej. – Pere

Odpowiedz

26

Czy to może być to, czego chcesz?

--- 
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') 
} 
``` 

Ta odpowiedź została mniej więcej skradziona z here.

+0

Nie było jasne (przynajmniej dla mnie) z drugiej odpowiedzi, że można to zrobić w przecenach, bez konieczności najpierw łączenia pliku R. Wspaniale, że mogę teraz trzymać się tylko RMarkdown. –

+0

Dla mnie dwie nagłówki pojawiają się przed obydwoma wykresami. – Nova

+0

Ponownie uruchom ten kod z bieżącą wersją pakietu. Dla mnie nadal działa. Czy w jakiś sposób zmieniłeś przykładowy kod? – Alex

1

Jak już wspomniano, każda pętla musi znajdować się w kawałku kodu. Być może łatwiej jest nadać histogramowi tytuł, niż dodać wiersz tekstu jako nagłówek dla każdego z nich.

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

Jednakże, jeśli chcesz utworzyć kilka raportów następnie sprawdzić this thread.

który również link do this example.
Wydaje się, gdy połączenie renderowanie jest wykonany z wnętrza scrip, zmienne środowiskowe można przekazać do pliku Rmd.

więc alternatywą może być mieć swój skrypt R:

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

I wtedy twój kawałek RMD wyglądałby następująco:

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

Disclaimer: Nie testowałem tego.

Powiązane problemy