knit_expand() のデモ

簡単な例をいくつか:

library(knitr)
knit_expand(text = '円周率の値は {{pi}} です。')
## [1] "円周率の値は 3.14159265358979 です。"
knit_expand(text = 'a の値は {{a}}で、 a + 1 は {{a+1}} です。', a = rnorm(1))
## [1] "a の値は 0.125581839313052で、 a + 1 は 1.12558183931305 です。"
knit_expand(text = '半径 {{r}} の円の面積は {{pi*r^2}} です。', r = 5)
## [1] "半径 5 の円の面積は 78.5398163397448 です。"

任意の数の変数:

knit_expand(text = 'a は {{a}} で、b は {{b}} です。なお、円周率は {{base::pi}} ではなく、 {{pi}} です。', a=1, b=2, pi=3)
## [1] "a は 1 で、b は 2 です。なお、円周率は 3.14159265358979 ではなく、 3 です。"

カスタムのデリミター <% %>:

knit_expand(text = '私は括弧が好きではないので、代わりに<>で%を使います:aは<% a %>です。', a = 8, delim = c("<%", "%>"))
## [1] "私は括弧が好きではないので、代わりに<>で%を使います:aは8です。"

pyexpander デリミター:

knit_expand(text = 'hello $(LETTERS[24]) and $(pi)!', delim = c("$(", ")"))
## [1] "hello X and 3.14159265358979!"

恣意的な R コード:

knit_expand(text = 'x {{x=rnorm(1)}}の値を見ることはできませんが、確かに作られています。: x = {{x}}')
## [1] "x の値を見ることはできませんが、確かに作られています。: x = 0.130810836006386"
res = knit_expand(text = c(' x | x^2', '{{x=1:5;paste(sprintf("%2d | %3d", x, x^2), collapse = "\n")}}'))
cat(res)
##  x | x^2
##  1 |   1
##  2 |   4
##  3 |   9
##  4 |  16
##  5 |  25

m4 の例: https://en.wikipedia.org/wiki/M4_(computer_language)

res = knit_expand(text = c('{{i=0;h2=function(x){i<<-i+1;sprintf("<h2>%d. %s</h2>", i, x)} }}<html>',
'{{h2("First Section")}}', '{{h2("Second Section")}}', '{{h2("Conclusion")}}', '</html>'))
cat(res)
## <html>
## <h2>1. First Section</h2>
## <h2>2. Second Section</h2>
## <h2>3. Conclusion</h2>
## </html>

テンプレートに基づいて回帰モデルを構築し、mtcars のすべての変数をループします。:

src = lapply(names(mtcars)[-1], function(i) {
knit_expand(text=c("# Regression on {{i}}", '```{r lm-{{i}}}', 'lm(mpg~{{i}}, data=mtcars)', '```'))
})
# knit the source
res = knit_child(text = unlist(src))
res = paste('<pre><code>', gsub('^\\s*|\\s*$', '', res), '</code></pre>', sep = '')
# Regression on cyl

```r
lm(mpg~cyl, data=mtcars)
```

```
## 
## Call:
## lm(formula = mpg ~ cyl, data = mtcars)
## 
## Coefficients:
## (Intercept)          cyl  
##      37.885       -2.876
```
# Regression on disp

```r
lm(mpg~disp, data=mtcars)
```

```
## 
## Call:
## lm(formula = mpg ~ disp, data = mtcars)
## 
## Coefficients:
## (Intercept)         disp  
##    29.59985     -0.04122
```
# Regression on hp

```r
lm(mpg~hp, data=mtcars)
```

```
## 
## Call:
## lm(formula = mpg ~ hp, data = mtcars)
## 
## Coefficients:
## (Intercept)           hp  
##    30.09886     -0.06823
```
# Regression on drat

```r
lm(mpg~drat, data=mtcars)
```

```
## 
## Call:
## lm(formula = mpg ~ drat, data = mtcars)
## 
## Coefficients:
## (Intercept)         drat  
##      -7.525        7.678
```
# Regression on wt

```r
lm(mpg~wt, data=mtcars)
```

```
## 
## Call:
## lm(formula = mpg ~ wt, data = mtcars)
## 
## Coefficients:
## (Intercept)           wt  
##      37.285       -5.344
```
# Regression on qsec

```r
lm(mpg~qsec, data=mtcars)
```

```
## 
## Call:
## lm(formula = mpg ~ qsec, data = mtcars)
## 
## Coefficients:
## (Intercept)         qsec  
##      -5.114        1.412
```
# Regression on vs

```r
lm(mpg~vs, data=mtcars)
```

```
## 
## Call:
## lm(formula = mpg ~ vs, data = mtcars)
## 
## Coefficients:
## (Intercept)           vs  
##       16.62         7.94
```
# Regression on am

```r
lm(mpg~am, data=mtcars)
```

```
## 
## Call:
## lm(formula = mpg ~ am, data = mtcars)
## 
## Coefficients:
## (Intercept)           am  
##      17.147        7.245
```
# Regression on gear

```r
lm(mpg~gear, data=mtcars)
```

```
## 
## Call:
## lm(formula = mpg ~ gear, data = mtcars)
## 
## Coefficients:
## (Intercept)         gear  
##       5.623        3.923
```
# Regression on carb

```r
lm(mpg~carb, data=mtcars)
```

```
## 
## Call:
## lm(formula = mpg ~ carb, data = mtcars)
## 
## Coefficients:
## (Intercept)         carb  
##      25.872       -2.056
```