2015-01-12 1 views
3

Я только начинаю использовать rmarkdown, pandoc и knitr. У меня много трудностей, пытаясь заставить pandoc получить изображение, которое находится на одном уровне над документом rmarkdown. Например, рассмотрим наш каталог проекта ~/тест, следующий rmarkdown находится в ~/тест/скриптов:pandoc и rmarkdown: Не удается получить изображение на один уровень выше документа rmarkdown.

--- 
title: "test" 
--- 

```{r global_options, include=FALSE} 
library('knitr') 
opts_knit$set(root.dir = '~/test') 
``` 

![test](figures/test.svg) 

Я затем запустить команду Rscript -e "rmarkdown::render('scripts/test.Rmd')" из каталога ~/тест. И это дает мне ошибку:

pandoc: Could not fetch figures/test.svg 
figures/test.svg: openBinaryFile: does not exist (No such file or directory) 

Я бы подумал, установив root.dir быть директория проекта, что pandoc будет получать файлы по сравнению с этим? Но кажется, что «рабочий каталог» всегда установлен относительно того, где находится документ rmarkdown? Любая помощь будет оценена по достоинству. Спасибо,

>sessionInfo() 
R version 3.1.0 (2014-04-10) 
Platform: x86_64-unknown-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_CA.UTF-8  LC_NUMERIC=C    LC_TIME=en_CA.UTF-8  LC_COLLATE=en_CA.UTF-8  LC_MONETARY=en_CA.UTF-8 LC_MESSAGES=en_CA.UTF-8 
[7] LC_PAPER=en_CA.UTF-8  LC_NAME=C     LC_ADDRESS=C    LC_TELEPHONE=C    LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base 

other attached packages: 
[1] vimcom_1.0-0 setwidth_1.0-3 colorout_1.0-2 

loaded via a namespace (and not attached): 
[1] tools_3.1.0` 
+0

Это работает, если вы запускаете скрипт из каталога 'scripts'? –

+0

К сожалению нет. Когда я бежал, cd ~/test/scripts && Rscript -e «rmarkdown :: render (« scripts/test.Rmd »)« Я получаю ту же ошибку. – TinyHeero

+0

Я думаю, что вы должны изменить «scripts/test.Rmd» на «test.Rmd», когда вы запускаете его изнутри 'scripts' –

ответ

2

Pandoc не знает knitr «s root.dir вариант. Вы должны писать пути относительно текущего рабочего каталога, например, ../figures/test.svg. Или запустите Rscript под каталогом scripts.

Если вы только начали использовать rmarkdown и knitr, я настоятельно рекомендую вам не использовать опцию root.dir, если вы действительно не понимаете, что это значит. Эти каталоги могут быть really, really tricky.

+0

Вот что меня смущает. Когда я запускаю Rscript -e «rmarkdown :: render (« scripts/test.Rmd ») из каталога ~/test. Разве это не моя рабочая директория ~/test, так как именно там я ее вызываю? И цифры - это папка (забыл упомянуть об этом), который находится на том же уровне, что и ~/test. Таким образом, это означает, что данные пути/test.svg должны быть исправлены, но это не сработает? – TinyHeero

+0

@ user2774754 Ваша рабочая директория в R является '~/test'. Но поскольку вы 'render ('scripts/test.Rmd')', я считаю, что rmarkdown временно изменит рабочий каталог на 'scripts /'. В этом случае вам придется использовать '../figures/test .svg'. Лично я рекомендую пользователям компилировать Rmd-файл в его каталоге и думать обо всех путях относительно каталога файла Rmd. Если вы визуализируете Rmd-файл из другого каталога, все может стать очень сложным. –

+0

ОК, что делает Причина, по которой я предпочитаю запускать Rscript один каталог над Rmd, состоит в том, что на практике у меня на самом деле есть сценарий «wrapper», который вызывает Rmd файл. Сценарий оболочки представляет собой R-файл, который отвечает за загрузку всех входных данных и данных предварительной обработки. И тогда это скрипт, что функция rmarkdown :: render(). Поэтому, когда он загружает все данные, данные относятся к тому, где я его называю (что и должно произойти). На практике вы также загружаете и обрабатываете все данные в вашем файле Rmd? Я хотел бы знать, поэтому я знаю, что такое правильная практика ... – TinyHeero