Использование purl для получения файла .Rmd из файла Rnw - PullRequest
1 голос
/ 04 ноября 2019

Я провел некоторый анализ в файле .Rmd. Теперь я хочу использовать некоторые объекты, созданные в этом файле, в отчете, который я записываю как файл .Rnw. Поскольку при переключении со Sweave на knittr в качестве механизма ткачества происходит следующее:

Если я запускаю строку purl(input = 'myfile.Rmd', output = 'myfile.R') в консоли, я получаю файл .R, который содержит только фрагменты R из файла .Rmd. Это то, что я хочу. Если я помещу эту строку в файл .Rnw и свяжу ее (то есть файл .Rnw), я получу myfile.R и никаких ошибок, но она будет полностью пустой (за исключением одного разрыва строки по какой-то причине).

Я также попытался поместить knitr::opts_chunk$set(purl = TRUE) и knit_hooks$set(purl = hook_purl) в файл .Rmd, а затем использовать knit() вместо purl() в моем файле .Rnw, но результат тот же.

Ниже приведен небольшой пример:

test.Rnw

\documentclass{article}

\begin{document}

<<test>>=
  library(knitr)
  purl(input = 'test.Rmd', output = 'test.R')
@

\end{document}

test.Rmd

```{r}
answer <- 42
```

Ожидаемый результат:

## ------------------------------------------------------------------------
answer <- 42

Фактический результат:



У кого-нибудь есть опыт с этим? Это ошибка или я что-то упустил? Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 09 ноября 2019

Согласно ?purl:

knitr попытается определить список шаблонов на основе расширения имени файла входного документа, например, Rnw файловиспользовать список apat$rnw, tex использовать список apat$tex, brew использует apat$brew и HTML-файлы использовать apat$html

Но, по-видимому, это нецелая история. Обратите внимание, что purl по сути является просто оболочкой для knit. Моя гипотеза заключается в том, что во время вязки документа RNW есть несколько глобальных опций, которые заставляют knit просто искать RNW-подобные шаблоны, даже если вы purl загружаете файл RMD из документа RNW.

Чтобы это исправить, явно настройте шаблоны уценки, вызвав pat_md() до purl(). После этого восстановите предыдущие шаблоны, чтобы не мешать остальным частям документа RNW.

\documentclass{article}

\begin{document}

<<test>>=
  library(knitr)
  opat <- knit_patterns$get()
  pat_md()
  purl(input = 'test.Rmd', output = 'test.R')
  knit_patterns$set(opat)
@

\end{document}
...