可以在 knitr 中将参数传递给 code_chunk 吗?

Possible to pass argument to code_chunk in knitr?

我对 knitr 很陌生,尤其是 read_chunk 的能力。我一直在研究是否有可能将参数传递给代码块,但还没有 found/understood 合适的资源。这可能吗?如果可能的话如何?

我的外部 R 脚本代码如下所示

  ## @knitr plotX

  plot.1  <- ggplot(df, aes(x = year, y = values, colour = names)) + 

    geom_line(aes(group = names)) + 
    scale_y_continuous(labels = scales::comma) + 
    scale_colour_brewer(palette = "Paired") +
    ylab("Expenses in SEK") +
    labs(colour = "Household Group") +
    theme_classic()

  plot.list  <- list("per housegroup" = plot.1, df)

  return(plot.list)
  ## -----

在我的 .Rmd 文件中,我能否以某种方式在参数中传递 df 参数?

比如

```{r} 
knitr::read_chunk('document.R')
<<plotX, argument df = object x>> 
```

如果您在 document.R 中的代码使用名为 df 的变量,则只需将其设置在您使用外部代码的块之前。例如:

document.R

# ---- my-chunk ----
plot(df)

test.Rmd

```{r cache=FALSE}
# this reads the code (but does not evaluate yet):
knitr::read_chunk('document.R') 
```

```{r}
# assign df
df <- iris
```

```{r my-chunk}
```

请注意,最后一个块名称与 document.r

中的代码段标签匹配

另见 http://yihui.name/knitr/demo/externalization/

更新

正如@user2706569 评论的那样:一种更简洁的方法是将绘图代码包装在一个函数中,而只是 source document.R 文件。