2013-09-21 29 views
6

Próbuję utworzyć ogólny szablon rmarkdown, który wykona analizę w ramce danych. Chciałbym móc przekazać ramkę danych do pliku rmarkdown, zamiast jej kodowania za każdym razem.W jaki sposób przekazać zmienne do pliku .Rmd R Markdown?

Poniżej znajduje się opis, z którego eksperymentowałem. Widać, że na górze muszę załadować ramkę danych (mtcars). Również ręcznie identyfikuję zmienne niezależne (ivs) i zmienne zależne (dvs). Chciałbym przekazać je jako parametry. Próbuję wykonać szybką i brudną wersję funkcjonalności SPSS Explore. „Explore.Rmd”:

```{r} 
library(ggplot2) 
data(mtcars) 
mtcars$am <- factor(mtcars$am, levels=c(0,1), labels=c("Manual", "Automatic")) 
df <- mtcars 
ivs <- c("cyl", "disp", "hp", "drat", "wt", "am", "qsec") 
dvs <- c("mpg", "qsec") 
``` 

Histograms 
------------------------------------- 

```{r} 
for (v in union(ivs, dvs)) 
{ 
    hist <- ggplot(df, aes_string(x=v)) + geom_histogram() 
    print(hist) 
} 
``` 

Chciałbym mieć kod, który wygląda mniej więcej tak, aby wygenerować kod HTML, używając knitr lub coś podobnego.

myDF <- read.delim("mydata.tab") 
ivs <- c("iv1", "iv2", "iv3") 
dvs <- c("dv1", "dv2", "dv3") 
magic("Explore.Rmd", myDF, ivs, dvs) # <- how do I do this part? 

Czy jest więc możliwe posiadanie statycznego pliku z przechodnią i przekazywanie parametrów? A może byłby inny sposób osiągnięcia tego, co próbuję zrobić?

+2

spojrzeć na 'knit_expand()' – baptiste

+0

gdzie czy możemy znaleźć funkcję 'knit_expand'? Czy mówisz o tym: http://cran.r-project.org/web/packages/knitr/vignettes/knit_expand.html? –

Odpowiedz

4

Myślę, że można użyć knit2html z pakietu knitr, aby wykonać "magię".

  1. zdefiniować plik markdown tak i zapisać go jako mydoc.Rmd

    ```{r} 
    source('test.R') 
    ``` 
    ```{r} 
    library(ggplot2) 
    for (v in union(ivs, dvs)) 
    { 
        hist <- ggplot(myDF, aes_string(x=v)) + geom_histogram() 
    print(hist) 
    } 
    
  2. W test.R przygotować swoje dane:

    myDF <- read.delim("mydata.tab") 
    ivs <- c("iv1", "iv2", "iv3") 
    dvs <- c("dv1", "dv2", "dv3") 
    
  3. skompilować za pomocą knitr

    Knit2html('mydoc.Rmd') 
    
+1

Umm .. więc gdzie są przekazywane dane? kiedy użytkownik uruchamia 'Knit2html ('mydoc.Rmd')', nie powinien "mydata.tab" zostać przekazany w tym wywołaniu? – rmf

1

myślę alternatywą jest podana w https://github.com/yihui/knitr/issues/567

trzeba będzie utworzyć te argumenty z góry, na przykład

args='2013' 
knit('../my.Rmd','test.html') 

następnie knit() rozpozna args wewnątrz my.Rmd; zobaczyć envir argument, jeśli chcesz zrozumieć szczegóły

7

Inną opcją jest do listy zmiennych za pomocą params w funkcji rmarkdown::render patrz: http://rmarkdown.rstudio.com/developer_parameterized_reports.html.

rmarkdown::render("MyDocument.Rmd", params = list(df = myDF)) 

następnie wywołać parametry w YAML:

--- 
title: My Document 
output: html_document 
params: 
    df: myDF 
--- 

które następnie mogą być przypisane w treści raportu przez:

```{r} 
myDF <- params$df 
``` 
Powiązane problemy