如何隐藏RMarkdown代码,与选项来查看它(How to hide code in RMarkd

2019-07-17 18:13发布

我正在写一个RMarkdown 文件中,我想重新运行一些块(5-9)。 有没有必要再次显示这些块,所以我认为使用

```{r echo=FALSE}

使重播块无形的,如在另一所描述计算器问题 。 这是好的,并且输出所期望的结果(改进的第二次迭代的配合-看到此溶液中实现此处 )。

在一个理想的世界,但是,该代码将可扩展,使用户可以看到(如见链接到Greasemonkey的解决方案到底发生了什么,如果他们想为教育目的和清晰度在这里 ),而不是藏在我的第二个rpubs例子。 该解决方案可以是这个样子,但有一个较短的周围盒子中,避免分心:

for (i in 1:nrow(all.msim)){ # Loop creating aggregate values (to be repeated later)
  USd.agg[i,]   <- colSums(USd.cat * weights0[,i])
}

for (j in 1:nrow(all.msim)){
weights1[which(USd$age <= 30),j] <- all.msim[j,1] /USd.agg[j,1] 
weights1[which(USd$age >= 31 & USd$age <= 50),j] <- all.msim[j,2] /USd.agg[j,2] 
weights1[which(USd$age >= 51),j] <- all.msim[j,3] /USd.agg[j,3] ## 
}
# Aggregate the results for each zone
for (i in 1:nrow(all.msim)){
  USd.agg1[i,]   <- colSums(USd.cat * weights0[,i] * weights1[,i])
}
# Test results 
for (j in 1:nrow(all.msim)){
weights2[which(USd$sex == "m"),j] <- all.msim[j,4] /USd.agg1[j,4]  
weights2[which(USd$sex == "f"),j] <- all.msim[j,5] /USd.agg1[j,5] 
}

for (i in 1:nrow(all.msim)){
USd.agg2[i,]   <- colSums(USd.cat * weights0[,i] * weights1[,i] * weights2[,i])
}

for (j in 1:nrow(all.msim)){
weights3[which(USd$mode == "bicycle"),j] <- all.msim[j,6] /USd.agg2[j,6]  
weights3[which(USd$mode == "bus"),j] <- all.msim[j,7] /USd.agg2[j,7] 
weights3[which(USd$mode == "car.d"),j] <- all.msim[j,8] /USd.agg2[j,8]  
weights3[which(USd$mode == "car.p"),j] <- all.msim[j,9] /USd.agg2[j,9]
weights3[which(USd$mode == "walk"),j] <- all.msim[j,10] /USd.agg2[j,10]
}
weights4 <- weights0 * weights1 * weights2 * weights3
for (i in 1:nrow(all.msim)){
USd.agg3[i,]   <- colSums(USd.cat * weights4[,i])
}
# Test results 
plot(as.vector(as.matrix(all.msim)), as.vector(as.matrix(USd.agg3)),
     xlab = "Constraints", ylab = "Model output")
abline(a=0, b=1)
cor(as.vector(as.matrix(all.msim)), as.vector(as.matrix(USd.agg3)))
#rowSums(USd.agg3[,1:3]) # The total population modelled for each zone, constraint 1
#rowSums(USd.agg3[,4:5])
#rowSums(USd.agg3[,6:10])

我很高兴与echo=F的解决方案,但会更具有可扩展的代码片断快乐之一。

编辑:所有RPubs除了第一个例子现在已经被删除,以避免堵塞其出色的出版系统,本质上是相同的文件。

Answer 1:

这已经取得了更容易rmarkdown包,没有三年前存在。 基本上你只要打开“代码折叠”: http://rmarkdown.rstudio.com/html_document_format.html#code_folding 。 你再也不用写任何JavaScript。

---
title: "Habits"
output:
  html_document:
    code_folding: hide
---


Answer 2:

如果您添加的代码,然后才能使用CSS选择做聪明事到输出的比特HTML标签 - 降价轻而易举地通过HTML:

<style>
div.hidecode + pre {display: none}
</style>

<div class="hidecode"></div>
```{r}
summary(cars)
```

在这里我的CSS样式规则的第一相匹配<pre>一个标记之后<div class=hidecode>并将其设置为不可见。 减价写入具有两个将R块<pre>标签-一个用于R和一个用于输出,并且该CSS捕捉的第一个。

现在你知道如何在CSS匹配的代码和输出块,你可以做各种的JavaScript一起聪明的事情。 你可以把一些在<div class=hidecode>标签,并添加切换可视性的单击事件:

<style>
div.hidecode + pre {display: none}
</style>
<script>
doclick=function(e){
e.nextSibling.nextSibling.style.display="block";
}
</script>

<div class="hidecode" onclick="doclick(this);">[Show Code]</div>
```{r}
summary(cars)
```

在复杂的下一步是使动作切换,但你还不如用jQuery ,并得到真正的时髦。 或者用这种简单的方法。 让我们用一个按钮做,但你还需要一个div让你挂接到R命令PRE块,并遍历变得有点复杂:

<style>
div.hideme + pre {display: none}
</style>
<script>
doclick=function(e){
code = e.parentNode.nextSibling.nextSibling.nextSibling.nextSibling
if(code.style.display=="block"){
 code.style.display='none';
 e.textContent="Show Code"
}else{
 code.style.display="block";
 e.textContent="Hide Code"
}
}
</script>

<button class="hidecode" onclick="doclick(this);">Show Code</button>
<div class="hideme"></div>
```{r}
summary(cars)
```

(注:我想你可以在包裹[R块<div>标签:

<div class="dosomething">
```{r}
summary(cars) 
``` 
</div>

但失败 - 任何人都知道为什么)?



文章来源: How to hide code in RMarkdown, with option to see it