使用purl从Rnw文件中获取.Rmd文件

我已经对.Rmd文件进行了一些分析。现在,我想在报表中使用在此文件中创建的一些对象,这些报表正在以.Rnw文件的形式编写。由于从Sweave切换为knittr作为编织引擎,因此会发生以下情况:

如果我在控制台中运行行purl(input = 'myfile.Rmd',output = 'myfile.R'),则会得到一个.R文件,该文件仅包含.Rmd文件中的R个块。那就是我想要的。 但是,如果我将此行放入.Rnw文件并进行编织(即.Rnw文件),则最终会得到myfile.R并且没有错误,但是它完全为空(除了换行符为出于某些原因)。

我还尝试将knitr::opts_chunk$set(purl = TRUE)knit_hooks$set(purl = hook_purl)放在.Rmd文件中,然后在我的.Rnw文件中使用knit()代替purl(),但是结果是一样。

以下是一个小示例:

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

实际输出:



有人对此有经验吗? 这是错误还是我错过了什么? 谢谢您的帮助!

jing35711 回答:使用purl从Rnw文件中获取.Rmd文件

@Cl. 的猜想是正确的。函数 <label> Your name [text* your-name] </label> <label> Your email [email* your-email] </label> <label> Assunto [text* your-subject] </label> <label> Your message (opcional) [textarea your-message] </label> [submit "Send"] 引入了很多副作用,包括设置解析模式。在这种情况下,我强烈建议您在单独的 R 会话中运行 knitr::knit()。一种方法是改变

purl()

purl(input = 'test.Rmd',output = 'test.R')

这确保在新的 R 会话中调用 xfun::Rscript_call(purl,list(input = 'test.Rmd',output = 'test.R')) ,该会话(几乎)独立于当前 R 会话,因此当前 R 会话中设置的解析模式不会影响新 R 会话的 {{ 1}} 次调用。

,

根据?purl

  
    

编织器将尝试根据输入文档的文件扩展名来确定图案列表,例如Rnw个文件使用列表apat$rnwtex使用列表apat$texbrew使用apat$brew,HTML文件使用apat$html   

但是显然,这还不是全部。请注意,purl essentially is just a wrapper to knit。我的猜测是,在编制RNW文档的同时,有一些全局选项集使knit仅查找类似RNW的模式,即使您正在purl中从RNW文件。

要解决此问题,请在pat_md()之前调用purl()来显式设置Markdown模式。然后,恢复以前的模式,以免干扰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}
本文链接:https://www.f2er.com/3166219.html

大家都在问