2015-05-19 18 views
5

Bazı bash komutları için bir işaretleme raporu yapmak için knitr kullanıyorum. Ancak, benim operasyonları bir dizin değişen ve orada bir dosya yaratılması yer alıyor, bu yüzden benim .Rmd dosyasında cd kullanabilirsiniz eğer ideal olacaktır:bash ile knitr: çalışma dizinini değiştir

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 
``` 

Ancak dosya myfile dizinde oluşturulur hangi ben Belgeyi knit ile derleyin ve mytest numaralı belgede değil. Her kod parçası için yeni bir bash kabuğunun başlatıldığını düşünüyorum.

R (https://github.com/yihui/knitr/issues/277) 'da cwd ayarı hakkında bash için değil, tartışmalar gördüm.

Kod parçası için bir çalışma dizini ayarlamanın bir yolu var mı?

+1

sen (root.dir = "... ") 've' setwd (" ...") '' opts_knit $ seti bakmak mı? – pfuhlert

+0

Evet, ancak bunlar her ikisi de R işlevleridir ve parçalarımda herhangi bir R kodu yoktur. Sadece 'knit' i aramak için R kullanıyorum. Bu yüzden, yığınlar arasında cwd değiştirme olasılığı görmüyorum ... – user1981275

+2

Bu bilinen bir sorundur. Lütfen http://yihui.name/knitr/demo/engines/ adresinin son paragrafına bakınız. Ayrıca bkz. Https://github.com/yihui/runr runr'ın hala "bash" açısından iyi olup olmadığından emin değilim. motor –

cevap

0

'u .Rmd dosyasını çalıştırmak için kullanabilirsiniz ve kod parçalarınızı sağlam tutmak için komut satırında herhangi bir "R kodu" ekleyin.

Rscript -e "library(knitr); opts_knit\$set(root.dir='~'); knit('test.Rmd')", aşağıdaki test.Rmd dosyasını çalıştırmak için örnek bir bash komutudur. İhtiyaçlarınıza uyacak şekilde root.dir'u değiştirebilirsiniz.

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* 
``` 

çıkışı:

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

o root.dir'e bir göz atacağım; Çözümünüz yaratılan dizinler içindeki dosyaları oluşturur, çünkü 'cd' ve 'touch' aynı kod yığınında yer alır. – user1981275

+0

Bahsettiğiniz aynı sorunu gördüm, @ user1981275. Dir asla değişmez, her şey belge dizininde kalır. – pauljohn32

İlgili konular