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

ada*_*ith 3 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 <- 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))`
Run Code Online (Sandbox Code Playgroud)

和模板(template.Rmd):

```{r, results='asis', echo = FALSE}
cat("### {{cut}} cut")
```

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

```
Run Code Online (Sandbox Code Playgroud)

将其与template.Rmd中的第二个块一起运行以eval=FALSE产生预期的输出-每个块的一系列标头以及所回显的代码。但是,调用中cut.levels字符串的替换值subset丢失了引号,我希望在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
Run Code Online (Sandbox Code Playgroud)

现在正在查找对象,Fair而不是使用的记录cut == "Fair"

谢谢你的协助!

> 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     
Run Code Online (Sandbox Code Playgroud)

aar*_*len 5

我看到两个问题。

首先,正如您所指出的那样,它{{cut}}被扩展为不带引号,因此您需要将标签用引号引起来。其次,您的结束日期plot()被放错了位置。它应与以下编辑一起运行:

### {{cut}} cut

```{r {{cut}}-cut}
with(subset(diamonds, cut == "{{cut}}"), 
     plot(carat, price, main = paste("{{cut}}", "cut"))
)
```
Run Code Online (Sandbox Code Playgroud)