knitr with bash:更改工作目录

时间:2015-05-19 13:16:15

标签: r bash markdown knitr cd

我正在使用knitr为一些bash命令制作降价报告。但是,我的操作包括更改目录并在那里创建文件,因此如果我可以在.Rmd文件中使用cd,那将是理想的选择:

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

但是,文件myfile是在我使用knit而不是mytest编译文档的目录中创建的。我想为每个代码块启动了一个新的bash shell。

我已经看过有关在R(https://github.com/yihui/knitr/issues/277)中设置cwd但未针对bash进行讨论的问题。

有没有办法为代码块设置工作目录?

2 个答案:

答案 0 :(得分:0)

您可以使用Rscript运行.Rmd文件并在命令行中包含任何“R代码”,以保持代码块的完整。

Rscript -e "library(knitr); opts_knit\$set(root.dir='~'); knit('test.Rmd')"是一个示例bash命令,用于运行下面的test.Rmd文件。您可以更改root.dir以满足您的需求。

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

输出:

```
## mytest:
## myfile
##
## mytest2:
## myfile2
```

答案 1 :(得分:0)

另一种看待它的方法是从你所在的位置创建每个文件夹和文件,而不是随处移动。

创建目录树

mkdir接受多个参数

> Error: Invalid regular expression: '^(?!Minoristas autorizados|How To
> Buy|Home of your local|Buy a|Distribuidores autorizados)$'. Regular
> expressions should follow RE2 syntax.

在那里创建文件

mkdir -p 'plots/scatter' 'plots/box'
# creates plots folder in the working directory,
# and then creates scatter and box folders in it.

将关键部分保留为变量

从一个中心变量轻松更改文件夹结构:

touch 'plots/scatter/firstfile.txt' 'plots/scatter/secondfile.txt'
# single quotes mean literals