Подтвердить что ты не робот

Работа с knitr с использованием подкаталогов

У меня есть папка проекта, которая является моей рабочей директорией. Позвольте назвать его проектом. В папке проекта находятся 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

4b9b3361

Ответ 1

Попробуйте это. Предполагается, что у вас есть 4 папки, которые вы указали в рабочем каталоге project. Он также предполагает, что у вас есть файл .csv с именем myData.csv в data.

Когда вы вязаете файл, график будет сохранен в figures. В конце код ищет файлы html в code и перемещает их в documents. Вероятно, это лучший способ сделать это.

```{r setup}
  library(knitr)
  opts_knit$set(root.dir=normalizePath('../'))
  opts_chunk$set(fig.path = "../figures/", dev='pdf') # corrected path and added dev
```

```{r import}
  dat <- read.csv("data/myData.csv")
```

```{r plot}
  # pdf(file="figures/test.pdf")  # I do this in setup instead
  plot(dat)
  # dev.off()
```

```{r move}
  files <- list.files("code/")
  index <- grep("html", files)
  file.rename(file.path("code", files[index]),
              file.path("documents", files[index]))
```