使用knitr标记注入HTML行

使用knitr标记注入HTML行,r,knitr,R,Knitr,有没有一种方法可以将R代码输出注入到生成的文档中,而不使用sourounding格式标记我现在所做的是遵循Darozzig的建议,并使用JS。不过,这个解决方案似乎很乏味。更简单、更整齐的刀会更好!下面是我完整的.Rmd脚本 <script type="text/javascript"> <!-- function toggle_visibility(id) { var e = document.getElementById(id); if(e.style.displa

有没有一种方法可以将R代码输出注入到生成的文档中,而不使用sourounding格式标记
我现在所做的是遵循Darozzig的建议,并使用JS。不过,这个解决方案似乎很乏味。更简单、更整齐的刀会更好!下面是我完整的.Rmd脚本

<script type="text/javascript">
<!--
function toggle_visibility(id) {
  var e = document.getElementById(id);
  if(e.style.display == 'none')
    e.style.display = 'block';
  else
    e.style.display = 'none';
}
//-->
</script>  

```{r}
1:10
```

<a onclick="toggle_visibility('answer_1');"><b><u>Antwort anzeigen</b></u></a>
<div id="answer_1" style=display:none>
```{r}
1:10
```
</div>

```{r}
1:10
```
回答(顶部)(“回答1”)
```{r}
1:10
```
答案(下)

您应该可以使用。您可能需要查看源代码,以了解render_markdown()的默认挂钩是什么:

>库(knitr)
>render_markdown()
>针织钩$get('echo')
无效的
>knit_hooks$get('消息')
功能(x,选项)
{
如果(严格){
str_c(“\n\n”,缩进块(x),“\n”)
}
else str\u c(“\n\n`\n”,x,`\n\n”)
}
>针织钩$get('输出')
功能(x,选项)
if(output_asis(x,options))x else hook.t(x,options)
>刀:::输出
功能(x,选项)
{
_为空(x)| |选项$results==“asis”
}
我不确定hook.t到底是做什么的,但你看看

另外,您是否尝试过asis选项?我不完全清楚您希望如何格式化内容,但您可以让它与asis一起工作


你可以用钩子做很多很酷的事情

你能最终展示你想要的吗?你的JS脚本可能也会为你展示。@kohske我想要的是与第二部分中通常的R输出相同的格式。我希望能够显示和隐藏输出的第二部分。目前,输出的第二部分的部分被破坏。@daroczig:我是JavaScript新手,所以非常欢迎任何想法:)我想要的只是使用markdown Rmd。可能你可以问这个家伙:看看你是否对
knitr
中的默认输出挂钩感兴趣;我同意你的观点,这个问题可以用钩子更好地回答,但是
chunk钩子
可能会更好。特别是如果他不介意更改Rmd以添加选项。我发现在knit时只增加knitr钩子而不更改源文档非常方便。然而,我所做的并不是特定于一个或几个文档,所以我不想处理添加块选项的问题。如果他只想对一两个文档执行此操作,那么块挂钩可能会更好。
<script type="text/javascript">
<!--
function toggle_visibility(id) {
  var e = document.getElementById(id); 
  if(e.style.display == 'none')
    e.style.display = 'block';
  else
    e.style.display = 'none';
}

function answer_top(name){
  var injection1 = '<a onclick=toggle_visibility("' + name + '")><b><u>Show answer</b></u></a>\n'
  document.write(injection1 + "\n")
  var injection2 = '<div id="' + name + '"style=display:none>'
  document.write(injection2 + "\n")
}

function answer_bottom() {
  document.write("</div>" + "\n")
}
//-->
</script>  

```{r}
1:10
```

<script type="text/javascript">answer_top("answer1")</script>
```{r}
1:10
```
<script type="text/javascript">answer_bottom()</script>
> library(knitr)
> render_markdown()
> knit_hooks$get('echo')
NULL
> knit_hooks$get('message')
function (x, options) 
{
    if (strict) {
        str_c("\n\n", indent_block(x), "\n")
    }
    else str_c("\n\n```\n", x, "```\n\n")
}
<environment: 0x2a3f590>
> knit_hooks$get('output')
function (x, options) 
if (output_asis(x, options)) x else hook.t(x, options)
<environment: 0x2a3f590>
> knitr:::output_asis
function (x, options) 
{
    is_blank(x) || options$results == "asis"
}
<environment: namespace:knitr>