这并不完美。例如,我没有为屏幕尺寸添加处理程序。不过,我可以。不过,您必须让我知道您在寻找什么。
这在 R Markdown 中使用了 Javascript。用于此的引擎是内置的。但是,我添加了代码供您检查(如果您选择的话):names(knitr::knit_engines$get())。
另外,在setup 块中,我添加了options(width = 75)。这将影响所有块输出。您可以更改它以使其成为特定于块的选项。但是,默认值为 80,因此您可能不会注意到差异。我这样做是因为对于三个组中的两个,Species 包裹到下一行。但是,对于versicolor,情况有所不同。这是统一执行的一部分。
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
# confirm engine for 'js' (it was #37 for me)
names(knitr::knit_engines$get())
# set the output width for chunks' render
# this is to keep the summaries even (versicolor was doing its own thing)
options(width = 75)
library(tidyverse)
```
样式不是在一个块中。这在设置和下一个块之间进行。
<style>
.setupCols {
display:flex;
flex-direction:row;
width: 100%;
}
.setupCols p{
display:flex;
flex-direction: column;
width: 45%;
}
.setupCols pre {
display:flex;
flex-direction: column;
width: 55%
}
.setupCols pre code {
font-size: 85%;
}
</style>
接下来是mapply 调用之前的一些代码和之后的代码。
<div class="setupCols">
```{r graphOne}
mapply(FUN = function(.x) {
plot(.x)
summary(.x)
}, split(iris, iris$Species), SIMPLIFY = FALSE)
```
</div>
在此块之后的任何时间点,您将添加一个样式块。如果您希望它多次应用,请将此块移动到末尾。如果你只希望它应用于块(我命名)graphOne,那么让它成为下一个块。
```{r styler,results='asis',engine='js'}
// search for class and tags
elem = document.querySelector('div.setupCols > pre > code');
// remove hashtags
elem.innerHTML = elem.innerHTML.replace(/#{2}/g, '');
// add newlines between summaries
elem.innerHTML = elem.innerHTML.replace(/\s{9}\n/g, '<br /><br />')
```
如果你内联运行这个块,你将不会得到任何输出。但是,当您knit 时,您会看到此输出。
我还在这里添加了一些文字,但看起来是这样的:
如果您想查看 Javascript 正在做什么,可以添加 eval = F 和 knit。这就是它的样子:
如果我遗漏了什么或有任何问题,请告诉我。