2014-05-14 21 views
7

Tôi đã tạo một ví dụ đơn giản cho thấy sự cố hiện tại của tôi.Các tệp đánh dấu R trùng lặp các số liệu khi được song song bằng Makefile

Tôi có một tập tin R-markdown, tên example.Rmd, có chứa đoạn mã sau

```{r} 
plot(rnorm(10000)) 
``` 

và một tập tin Makefile với các nội dung sau đây

all : example01.html example02.html 

example01.html : example.Rmd 
    Rscript -e "library(knitr); knit2html(input='example.Rmd', output='example01.html')" 

example02.html : example.Rmd 
    Rscript -e "library(knitr); knit2html(input='example.Rmd', output='example02.html')" 

Nếu tôi chạy các tập tin tuần tự Makefile

make 

không có vấn đề gì.

Nếu tôi chạy makefile song song

make -j 2 

các khối được tạo ra bởi knit2html chức năng chồng chéo và cả file html chứa các hình ảnh tương tự.

Bất kỳ đề xuất nào? Tôi đã tìm kiếm một giải pháp nhưng tôi không tìm thấy gì cả.

+0

đặt Rmds của bạn trong thư mục riêng của họ –

+0

Có chỉ một tệp Rmd, không phải hai tệp.Một tệp R-markdown được sử dụng để tạo hai tệp html khác nhau – marc1s

+0

đặt liên kết tượng trưng đến tài liệu đơn lẻ từ thư mục khác –

Trả lời

2

Sử dụng ý tưởng về Karl, tôi đã viết một giải pháp khả thi.

all : example01.html example02.html 

example01.html : example.Rmd 
    mkdir -p [email protected] 
    Rscript -e 'library(knitr); opts_knit$$set(base.dir = "[email protected]"); knit2html(input="example.Rmd", output="[email protected]/[email protected]")' 
    mv [email protected]/[email protected] . 
    rm -r [email protected] 

example02.html : example.Rmd 
    mkdir -p [email protected] 
    Rscript -e 'library(knitr); opts_knit$$set(base.dir = "[email protected]"); knit2html(input="example.Rmd", output="[email protected]/[email protected]")' 
    mv [email protected]/[email protected] . 
    rm -r [email protected] 

Có hai sửa đổi liên quan đến mã ban đầu.

  1. Như Karl đã nhận xét, tôi đã bao gồm dòng opts_knit $ set (base.dir = "dir_example0? .html") theo cách mà thư mục hình được tạo trong đường dẫn đó.
  2. Tôi đã trao đổi "và" biểu tượng trong lệnh Rscript -e như nhận xét here

thực hiện song song

make -j 2 

hoạt động tốt.

Các vấn đề liên quan