4

我使用knitr. 该文档广泛使用了包的knit_expand()模板功能。MWE 说明了这一点(基于 Yihui Xie 自己 的函数示例)。

  • 主要文件knit-expand-MWE.Rnw

    \documentclass{article}
    
    \title{How to extract code when using\\
    knit\_expand() for templates?}%
    \author{Knitr User}
    
    \begin{document}
    
    \maketitle
    \tableofcontents
    
    \newpage
    \section{Write one row of data}
    
    Only the first two sections are evaluated.
    
    <<run-all, include=FALSE>>=
    library(knitr)
    src = NULL
    for (i in 1:3) src = c(src, knit_expand('template.Rnw'))
    @
    
    \Sexpr{paste(knit(text = src), collapse = '\n')}
    
    \end{document}
    
  • template.Rnw主文档调用的模板

    \subsection{Now i is {{i}}}
    
    This chunk is {{if (i > 2) 'not '}}evaluated.
    <<row-{{i}}, eval={{i <= 2}}>>=
    # row number {{i}}
    iris[{{i}}, ]
    @
    

我现在需要提取相应的 R 代码。运行purl("knit-expand-MWE.Rnw")输出knit-expand-MWE.R,其中包括块中的代码以及对模板的引用:

## ----run-all, include=FALSE----------------------------------------------
library(knitr)
src = NULL
for (i in 1:3) src = c(src, knit_expand('template.Rnw'))

我想要的是相应的“扩展”代码(为了不使用的同事的利益knitr),例如:

## ----row-1, eval=TRUE----------------------------------------------
## row number 1
iris[1, ]

## ----row-2, eval=TRUE----------------------------------------------
## row number 2
iris[2, ]

## ----row-3, eval=FALSE----------------------------------------------
## row number 3
iris[3, ]

我怎样才能做到这一点?

4

1 回答 1

2

你可以运行purl()src例如

purl(text = src, output = 'knit-expand.R')
于 2017-08-24T14:39:33.853 回答