knitr: 有条件地评估普通代码块

3

这是我想在我的Rhtml文档中做的事情:

<!--begin.rcode
if (errors==1) {
end.rcode-->
<p>You have an error!</p>
<!--begin.rcode

end.rcode-->

基本上,我正在尝试像使用PHP一样使用knitr。上面的方法行不通,但有没有正确的方法可以做到这一点?
这个问题与 rmarkdown块中的条件“echo”(或eval或include)不同。那是关于如何有条件地评估knitr“块”的问题。这是关于如何有条件地评估两个knitr块之间的“正常”HTML(或TeX或Markdown)的问题。

如果您不坚持使用 knitr,那么您可以尝试使用 <% ... %> 标签进行条件语句和 <%= ... %> 进行 markdown 打印的 pander:http://rapporter.github.io/pander/#brew-to-pandoc,否则您可能需要在传递给 knitr 之前对文档进行 brew::brew。或者也许 knitr 内部支持此功能,我不确定 :) - daroczig
尝试将您的HTML(或TeX或md)放入在条件性评估块中的“cat”语句中。 - Thomas
@dash2 在你的编辑之后,我上面的评论仍然有效。 - daroczig
@daroczig 是啊,使用 brew 是一种方法。但我想知道是否有 knitr 的解决方案。 - user3603486
@Thomas,请看我在arvi1000的回答下面的评论。 - user3603486
1个回答

1
您可以在代码块中使用普通的if语句。如果您想要一个HTML格式的错误消息,您可以在代码块选项中使用results='asis'。就像这样:
<!--begin.rcode results='asis'
if (errors==1) {
  cat('<p>You have an error</p>')
} else {
  # r code to evaluate when errors!=1
}
end.rcode-->

这是正确和有用的,但不是我正在寻找的。人们可以在R内部打印HTML,但对于大块的HTML来说,将它们直接放在文件中更加美观和易读。 - user3603486
一种解决方法是将大的HTML块放在“other_source_file.html”中,然后使用readLines + cat读取内容。这不是您所要求的确切过程,但可以保持易于阅读/编辑。我不太乐观地认为您所要求的确切内容是可能的,但让我们看看其他人说什么。 - arvi1000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接