2015-05-19 13 views
5

Tôi đang sử dụng knitr để tạo báo cáo đánh dấu cho một số lệnh bash. Tuy nhiên, hoạt động của tôi bao gồm thay đổi một thư mục và tạo ra một tập tin đó, vì vậy nó sẽ là lý tưởng nếu tôi có thể sử dụng trong tập tin cd .Rmd tôi:knitr với bash: thay đổi thư mục làm việc

make a directory 
```{r mkdir, engine='bash'} 
mkdir mytest 
``` 
cd into directory 
```{r cd, engine='bash'} 
cd mytest 
``` 
create file 
```{r create, engine='bash'} 
touch myfile 
``` 
check contents 
```{r ls, engine='bash'} 
ls 
``` 

Tuy nhiên, các tập tin myfile được tạo ra trong thư mục mà từ đó tôi biên soạn tài liệu với knit và không phải trong mytest. Tôi đoán một bash shell mới được bắt đầu cho mỗi đoạn mã.

Tôi đã thấy các cuộc thảo luận về việc đặt cwd trong R (https://github.com/yihui/knitr/issues/277) nhưng không cho bash.

Có cách nào có thể đặt thư mục hoạt động cho đoạn mã không?

+1

Bạn đã có một cái nhìn tại 'opts_knit $ set (root.dir = "... ") 'và' setwd (" ...") '? – pfuhlert

+0

Có, nhưng đây là cả hai chức năng R và tôi không có bất kỳ mã R trong khối của tôi. Tôi chỉ sử dụng R để gọi 'đan'. Vì vậy, tôi không thấy một khả năng thay đổi cwd giữa các khối ... – user1981275

+2

Đó là một vấn đề đã biết. Xin vui lòng xem đoạn cuối của http://yihui.name/knitr/demo/engines/ Cũng thấy https://github.com/yihui/runr Tôi không hoàn toàn chắc chắn nếu runr vẫn hoạt động tốt trong điều khoản của 'bash 'động cơ. –

Trả lời

0

Bạn có thể sử dụng Rscript để chạy tệp .Rmd và bao gồm bất kỳ "mã R" nào trong dòng lệnh để giữ nguyên khối mã của bạn.

Rscript -e "library(knitr); opts_knit\$set(root.dir='~'); knit('test.Rmd')" là lệnh bash mẫu để chạy tệp test.Rmd bên dưới. Bạn có thể thay đổi root.dir để phù hợp với nhu cầu của bạn.

make directories 
```{r mkdir, engine='bash'} 
mkdir mytest 
mkdir mytest2 
``` 

create one file in the 1st dir 
```{r create, engine='bash'} 
cd mytest 
touch myfile 
``` 

create another file in the 2nd dir 
```{r create2, engine='bash'} 
cd mytest2 
touch myfile2 
``` 

check contents 
```{r ls, engine='bash'} 
ls mytest* 
``` 

Sản lượng:

``` 
## mytest: 
## myfile 
## 
## mytest2: 
## myfile2 
``` 
+0

ông root.dir đặt trong các tùy chọn ở đây không có hiệu lực; giải pháp của bạn tạo ra các tệp trong các thư mục được tạo vì 'cd' và' touch' nằm trong đoạn mã giống nhau. – user1981275

+0

Tôi thấy cùng một vấn đề bạn đề cập đến, @ user1981275. dir không bao giờ thay đổi, mọi thứ vẫn nằm trong thư mục tài liệu. – pauljohn32

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