knitr:在HTML标签中包装计算机输出

时间:2014-02-17 04:39:45

标签: r html knitr

使用knitr,我试图将输出包装在特定类的div中。例如,这是代码:

```{r}
# Print the pressure data set
head(pressure)
````

我希望输出(但不是代码)包含在div中,例如<div class='myclass'>,因为该类提供了对输出的特殊控制。 (在我的例子中,它将显示在2列中)

我在StackOverflow上发现了另一个问题,但提供的答案包含了div中的代码和输出,而我只想让输出进入div。

这可以用knitr完成吗?

编辑:

这是当前生成的内容:

<pre class="r"><code>head(pressure)</code></pre>
<pre><code>##   temperature pressure
## 1           0   0.0002
## 2          20   0.0012
## 3          40   0.0060
## 4          60   0.0300
## 5          80   0.0900
## 6         100   0.2700</code></pre>

我想要这样的事情:

<pre class="r"><code>head(pressure)</code></pre>
<div class="myclass">
<pre><code>##   temperature pressure
## 1           0   0.0002
## 2          20   0.0012
## 3          40   0.0060
## 4          60   0.0300
## 5          80   0.0900
## 6         100   0.2700</code></pre>
</div>

但我希望它可以针对特定的块进行自定义。也就是说,我希望能够设置块选项,以便某些块的输出为myclass,而其他块的输出为otherclass

1 个答案:

答案 0 :(得分:3)

这是一个最小的例子:

```{r setup, include=FALSE, cache=FALSE, results='asis'}
knit_hooks$set(
  output = function(x, options) {
    # any decoration here
    paste0("<div class='myout'>", x, "</div><br/>")
    }
  )

```

<style>
.myout {background:red}
</style>

```{r}
mean(1:3)
sd(1:3)
var(1:3)
```

更新

也许这有帮助。

```{r setup, include=FALSE, cache=FALSE, results='asis'}
ho0 <- knit_hooks$get('output')

knit_hooks$set(
  output = function(x, options) {
    if (is.null(options$class)) ho0(x)
    else 
      # any decoration here
      paste0("<div class='", options$class, "'>", ho0(x), "</div><br/>")
    }
  )

```

<style>
.myout {background:red}
.myout2 {background:skyblue}
</style>

```{r}
mean(1:3)
```
```{r class="myout"}
sd(1:3)
```
```{r class="myout2"}
var(1:3)
```

请注意,您可以在.Rmd外部定义挂钩。 在knit_hook$set之前致电knit