2013-09-21 33 views
6

Tôi đang cố gắng tạo mẫu rmarkdown chung sẽ phân tích trên một khung dữ liệu. Tôi muốn để có thể vượt qua trong một khung dữ liệu vào một tập tin rmarkdown thay vì mã hóa cứng nó mỗi lần.Làm cách nào tôi có thể chuyển các biến vào tệp đánh dấu R.

Dưới đây là một đoạn trích mà tôi đã thử nghiệm. Bạn có thể thấy rằng ở trên cùng tôi phải tải khung dữ liệu (mtcars). Tôi cũng tự nhận dạng các biến độc lập (ivs) và các biến phụ thuộc (dvs). Tôi muốn chuyển những thông số này dưới dạng tham số. Tôi đang cố gắng làm một phiên bản nhanh chóng và dơ bẩn của chức năng Khám phá SPSS. "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) 
} 
``` 

Tôi muốn có mã giống như thế này để tạo HTML bằng cách sử dụng đan hoặc tương tự.

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? 

Vì vậy, có thể có tệp thả xuống tĩnh và truyền tham số cho nó không? Hay sẽ có một cách khác để hoàn thành những gì tôi đang cố gắng làm?

+2

có một cái nhìn tại 'knit_expand() ' – baptiste

+0

nơi chúng ta có thể tìm thấy hàm 'knit_expand' không? bạn đang nói về điều này: http://cran.r-project.org/web/packages/knitr/vignettes/knit_expand.html? –

Trả lời

4

Tôi nghĩ bạn có thể sử dụng knit2html từ gói knitr để thực hiện "ma thuật".

  1. Bạn xác định tập tin markdown bạn như thế này và lưu nó như 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. Trong test.R bạn chuẩn bị dữ liệu của bạn:

    myDF <- read.delim("mydata.tab") 
    ivs <- c("iv1", "iv2", "iv3") 
    dvs <- c("dv1", "dv2", "dv3") 
    
  3. Bạn biên dịch sử dụng knitr

    Knit2html('mydoc.Rmd') 
    
+1

Umm .. vậy dữ liệu được truyền ở đâu? khi người dùng chạy 'Knit2html ('mydoc.Rmd')', không nên "mydata.tab" được chuyển vào cuộc gọi đó? – rmf

1

Tôi nghĩ một giải pháp thay thế được cung cấp tại https://github.com/yihui/knitr/issues/567

bạn sẽ phải tạo các đối số này trước, ví dụ:

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

sau đó knit() sẽ nhận ra args bên my.Rmd; thấy lập luận envir nếu bạn muốn hiểu các chi tiết

7

lựa chọn khác là để liệt kê các biến của bạn sử dụng params trong rmarkdown::render chức năng, xem: http://rmarkdown.rstudio.com/developer_parameterized_reports.html.

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

Sau đó gọi các thông số trong yaml:

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

Mà sau đó có thể được gán trong cơ thể báo cáo theo:

```{r} 
myDF <- params$df 
```