R 基于字符向量进行子集设置时,knit_expand失败

R 基于字符向量进行子集设置时,knit_expand失败,r,subset,knitr,R,Subset,Knitr,我基本上是在尝试修改,以编程方式为变量的每个级别生成带有绘图的块 然而,在我的特殊情况下,我将传递一个用于后续子集设置的字符向量,这似乎是代码失败的原因 # My report (test.Rmd) ```{r} library(ggplot2) library(knitr) data(diamonds) diamonds$cut <- factor(gsub(" ", "_", diamonds$cut)) # Get rid of spaces cut.levels <- le

我基本上是在尝试修改,以编程方式为变量的每个级别生成带有绘图的块

然而,在我的特殊情况下,我将传递一个用于后续子集设置的字符向量,这似乎是代码失败的原因

# My report (test.Rmd)

```{r}
library(ggplot2)
library(knitr)
data(diamonds)
diamonds$cut <- factor(gsub(" ", "_", diamonds$cut)) # Get rid of spaces
cut.levels <- levels(diamonds$cut)
```

## Generate report for each level of diamond cut
```{r, include=FALSE}
src <- lapply(cut.levels, function(cut) knit_expand(file = "template.Rmd"))
```

`r knit(text = unlist(src))`
在template.Rmd中的第二个块设置为
eval=FALSE
的情况下运行此命令,将生成预期的输出—每个块都有一系列头,其中包含回显代码。但是,
子集
调用中的
cut.levels
字符串中被替换的值丢失了引号,我预计在删除
eval=FALSE
块选项时会导致以下错误:

Quitting from lines 6-8 (test.Rmd) 
Quitting from lines 12-12 (test.Rmd) 
Error in eval(expr, envir, enclos) : object 'Fair' not found
Calls: <Anonymous> ... with -> subset -> subset.data.frame -> eval -> eval
我看到两个问题

首先,正如您所指出的,
{{cut}
是在没有引号的情况下展开的,因此您需要将标记用引号括起来。其次,
plot()
的结束参数放错了位置。它应通过以下编辑运行:

### {{cut}} cut

```{r {{cut}}-cut}
with(subset(diamonds, cut == "{{cut}}"), 
     plot(carat, price, main = paste("{{cut}}", "cut"))
)
```

这是显而易见的。谢谢@aaronwolen。虽然,现在只有第一个头被识别为html文档中的实际头。我通常迭代整数向量(与
cut.levels
长度相同)并获取字符向量在模板中的第i个位置。标题问题是在
template.Rmd
的第一个块中设置
echo=FALSE
的结果。标题在
echo=TRUE
下正常工作。我想知道是否有办法在不回显代码的情况下获取标题?当然。实际上,您不需要在块中生成头。我编辑我的答案是为了演示,只需注意标题前面应该有一个空格。
> sessionInfo()
R version 3.2.1 (2015-06-18)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     
### {{cut}} cut

```{r {{cut}}-cut}
with(subset(diamonds, cut == "{{cut}}"), 
     plot(carat, price, main = paste("{{cut}}", "cut"))
)
```