【问题标题】:knitr: how to get and override chunk options from inside a chunkknitr:如何从块中获取和覆盖块选项
【发布时间】:2016-06-22 15:45:35
【问题描述】:

我有 2 个关于 knitr 块选项的问题:

1) 是否可以从代码块中覆盖knitr 块选项,以便将选项应用到同一块中?例如编写类似于以下行的内容并获得结果as-is

```{r, results= "markup"}
    knitr::opts_chunk$set(results= "asis")
    for (i in 1:5)
        print("# This text should be printed 'as-is'")
```

附言我熟悉knitr::asis_output

2) 是否可以从块中获取块选项?例如,使用如下代码:

```{r}
   knitr::opts_chunk$get("results")
```

并得到字符串markup

```{r, results='asis'}
   knitr::opts_chunk$get("results")
```

并获取字符串asis

不幸的是,knitr::opts_chunk$get("results") 获得全局选项,而不是当前块的选项。

【问题讨论】:

  • 你的最终目标是什么?
  • 编写一个函数,将knitr 块选项重置为results='asis' 并打印几行文本(as-is),例如,几个trellisplotly 对象。
  • 你知道吗? yihui.name/knitr/hooks
  • 您没有提供足够的动力在 same 块中执行此操作。举一个需要这样做的真实例子。

标签: r knitr r-markdown


【解决方案1】:

1) 可以使用函数knitr::normal_printknitr::asis_output 自定义打印(正如您提到的)。例如:

```{r, results='markup'}
knitr::asis_output(replicate(5, "# This text should be printed 'as-is'\n"))

print("# This text should be printed 'normal'")
```

或者

```{r, results='asis'}
for (i in 1:5)
    cat("# This text should be printed 'as-is'\n")

knitr::normal_print("# This text should be printed 'normal'\n")
```

2) 可以使用knitr::opts_current$get() 检索当前块选项。使用:

```{r, results='asis'}
knitr::opts_current$get("results")
```

并获取字符串asis

【讨论】:

    猜你喜欢
    • 2012-07-25
    • 1970-01-01
    • 2015-05-22
    • 2019-09-28
    • 2019-11-26
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多