У меня есть папка проекта, которая является моей рабочей директорией. Позвольте назвать его проектом. В папке проекта находятся 4 подкаталога: code
, data
, figures
и documents
.
Я хотел бы поместить мой файл .Rmd
в подкаталог code
. Я хотел бы, чтобы цифры вошли в подкаталог figures
. Я хотел бы, чтобы файлы .html
, .md
и .docx
вошли в подкаталог documents
. Я хотел бы прочитать в моих данных из подкаталога data
. Возможна ли такая организационная структура? Кажется, я не могу заставить его работать.
Я начинаю с этого, чтобы установить рабочий каталог на project
, потому что я понимаю, что knitr смотрит в папку с файлом .Rmd
и рассматривает его как рабочий каталог, если это не указано.
```{r setglobal, cache = FALSE, include = TRUE}
library(knitr)
opts_knit$set(root.dir = "..")
```
Затем я попытаюсь установить путь фигуры относительно рабочего каталога.
```{r setchunk, cache=FALSE, include=TRUE}
opts_chunk$set(fig.path = "./figures/")
getwd()
```
Рабочий каталог корректно отображается как project
. Данные корректно считываются из подкаталога data
. Весь вывод отображается правильно и весь код запускается.
```{r readdata}
crctx <- readRDS("./data/crctx.rds")
getwd()
*run lots of analyses here*
```
Но цифры вернутся в каталог project/code/figures
вместо project/figures
.
Я также попытался установить base.dir
, но это ничего не меняет. Я добавил параметр
base.dir = "./figures"
в список opts_knit$set
. Я даже пытался жестко кодировать полный путь. Но ничто не может изменить это.
Я использую R 3.10 и RStudio 0.98.953. Это Mac 0SX 10.9.4.
Я что-то упустил? И есть ли способ разместить выходные файлы в их собственный каталог?
Причина, по которой это важно, - это то, что я хотел бы, чтобы наша компания использовала одну и ту же структуру каталогов, и это позволит нам лучше организовать наши проекты.
Заранее благодарим за помощь.
Update:
Я понимаю, что opts_chunk$set(fig.path = "./figures/")
неверен. Я предположил, что установка корневого каталога в папку проекта с помощью opts_knit$set(root.dir = normalizePath("../"))
приведет к глобальному изменению в knitr, так как это то, что он должен делать. И он работает для подкаталога данных, к которому теперь можно получить доступ с помощью "./data"
, который позволяет запускать код. Однако глобальная настройка не применяется к выходу с рисунком. Поэтому правильная спецификация opts_chunk$set(fig.path = "../figures/")
- с помощью ../
вместо ./
. Я думаю, что Ричи Коттон исправил это, и я не очень долго его видел.
Я также использовал Terminal в OSX для создания символической ссылки от project/documents
до project/code/figure
, которая по умолчанию создается knitr. С этим, knitr смотрит в правый под-подкаталог, но все заканчивается на projects/documents
. Это сработало очень хорошо. Я не могу заставить R правильно создать символическую ссылку, используя file.symlink. Но он отлично работает в Терминале. Наведите указатель мыши.
обновление 2:
Я также получил выходные файлы. Вы должны использовать команду knit напрямую. Текст ниже.
Код Knitr для вставки уцененного документа с .Rmd в коде/анализа и вывода в выходные/отчеты: knit("./code/knitr_file.Rmd", "./documents/knitr_output.md")
Код Pandoc для преобразования .md файла в .docx - использует ту же папку, что и файл .md
pandoc("./documents/knitr_output.md", format = "docx")
стили вывода (из документации кбит)
pandoc('knitr_output.md', format='html') # HTML
pandoc('knitr_output.md', format='latex') # LaTeX/PDF
pandoc('knitr_output.md', format='docx') # MS Word
pandoc('knitr_output.md', format='odt') # OpenDocument