Html 如何编写一个R函数来创建一系列散布有标记的绘图

Html 如何编写一个R函数来创建一系列散布有标记的绘图,html,r,rstudio,r-markdown,plotly,Html,R,Rstudio,R Markdown,Plotly,我有一个函数,它可以生成数量可变的绘图图形,并创建R标记标题,例如 ###绘图标题 这些标题最终出现在RStudio下生成的R markdown html报告中的浮动目录中 我知道如何使用htmltools::tagList生成一系列html和plotly对象,这些对象将呈现在一个流中,但我不知道如何用markdown替换htmltools::html('foo')一段htmltools::tagList(list(plot(…),html('caption stuff),…))元素。多亏了我的

我有一个函数,它可以生成数量可变的
绘图
图形,并创建R标记标题,例如

###绘图标题

这些标题最终出现在RStudio下生成的R markdown html报告中的浮动目录中

我知道如何使用
htmltools::tagList
生成一系列
html
plotly
对象,这些对象将呈现在一个流中,但我不知道如何用
markdown
替换
htmltools::html('foo')
一段
htmltools::tagList(list(plot(…),html('caption stuff),…))
元素。

多亏了我的问题,这里有一个解决方案。这里的
R
是一个字符向量列表,其中的每个元素都是文本和标记的混合体
Pl
是一个
plotly
对象列表
nP
是每个列表的长度

bn <- paste0('c', round(runif(1, 0, 1e6)))  # base chunk name
for(i in 1 : nP) {
  cn <- paste0(bn, i)  # name of individual generated chunk
  Plti <- Pl[[i]]      # fetch i'th plotly graphic object
  k <- c(R[[i]], paste0('```{r ', cn, ',echo=FALSE}'), 'Plti', '```')
  cat(trimws(knitr::knit(text=knitr::knit_expand(text=k), quiet=TRUE)))
  }
}

bn虽然不直接适用(它是关于
ggplot2
),但您可以从中调整方法。具体来说,其目的是让块创建标记文本,并使其显示在(post-
knitr
)标记文件中。也许您需要的最大技巧是
results=“asis”
?的chunk选项,它做到了这一点。非常感谢。我用
{r test2,results='asis'}k对它进行了测试,我可以想象使用这种方法进行缓存时会出现问题,所以如果有更直接的方法,那也不错。在输入答案格式之前,我将稍等片刻。FrankHarrell,通过为区块添加
``{r chunkname,cache=TRUE,results='asis'}
,它已被缓存。我通过在调用
subchunkify
的同一块中添加
Sys.sleep
进行测试,在随后的调用中,睡眠没有发生(图像仍然存在)。这是因为
knitr
基于当前块(而不是生成的块)的名称和其中的代码进行缓存,因此
runif
对块的缓存没有随机影响。这样做的一个副作用是,如果
subchunkify
函数定义本身发生更改,由于它位于不同的块中,因此可能不会导致打印块使缓存无效。这可以通过添加
cache.globals=“subchunkify”
dependson=“chunk\u with\u subchunkify”
来缓解。注意:如果上面列表
R
中的字符向量有一个标题,例如
“##Subheading”
,则该标题将需要由字符串元素包围
“\n”
因此标题将被识别为降价。此外,还需要删除
trimws()
。如果
\n
字符与标题位于同一字符串中,则不起作用。