【发布时间】:2019-01-19 01:15:34
【问题描述】:
我有一个函数可以生成可变数量的plotly 图形并创建 R 降价标头,例如
### Caption for plot
这些标题最终出现在 RStudio 下生成的 R markdown html 报告中的浮动目录中。
我知道如何使用htmltools::tagList 来生成一系列html 和plotly 对象,这些对象将全部呈现在一个流中,但我不知道如何用markdown 替换htmltools::HTML('foo') 部分htmltools::tagList(list(plot_ly(...), HTML('caption stuff), ...)) 元素。
【问题讨论】:
-
虽然不是直接适用(大约是
ggplot2),但您可以采用stackoverflow.com/a/47339394/3358272 的方法。具体来说,目的是让一个块创建降价文本,并使其在 (post-knitr) 降价文件中按原样显示。也许您需要的最大技巧是results="asis"的块选项? -
做到了。谢谢!我用
{r test2,results='asis'} k <- c('## TOC test entry', '{r junk}', 'x1=runif(10);', 'y1=runif(10);', 'plot_ly(data.frame(x1,y1), x=~x1, y=~y1)', '') cat(trimws(knitr::knit(text = knitr::knit_expand(text = k), quiet = TRUE))) -
我可以想象这种方法的缓存会出现问题,所以如果有更直接的方法也很好。在输入答案格式之前,我将稍等片刻。
-
FrankHarrell,通过为块添加
```{r chunkname,cache=TRUE,results='asis'},它被缓存了。我通过在与subchunkify的调用相同的块中添加Sys.sleep来进行测试,并且在随后的调用中睡眠没有发生(并且图像仍然存在)。它之所以有效是因为knitr基于当前块的名称(不是生成的块)和其中的代码进行缓存,因此runif对块的缓存没有随机影响。 -
这样做的一个副作用是,如果您的
subchunkify函数定义本身发生变化,因为它位于不同的块中,它可能不会导致绘图块无效缓存。这可以通过添加cache.globals="subchunkify"或dependson="chunk_with_subchunkify"来缓解,这两个选项都在yihui.name/knitr/options/#cache 中定义。
标签: html r rstudio r-markdown plotly