将dot(graphviz)代码作为字符串返回的编织函数

时间:2013-12-17 15:55:12

标签: r graphviz knitr dot

在knitr chunk中使用带有engine =“dot”的纯点非常简单,但你必须自己编写点代码。

<<r dot-ex,  engine = "dot",  echo=FALSE>>=
digraph test123 { 
          A -> B
}
@

我想要一个功能为我做这件事。

dotFun <- function() {
  dotCode <- 'digraph test123 { 
          A -> B
          }'
  return(dotCode)
}

然后在一个类似于返回LaTeX代码的函数的knit chunk中调用它,并使用result ='as.is'编织

<<r dot-ex,  engine = "dot">>=
cat(dotFun())
@

但这会导致:(knit_engines $ get(options $ engine))(选项)出错: 设置块选项结果='asis'会产生相同的错误消息。

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:1)

任何特殊原因必须在具有该引擎的knitr块内进行评估?为什么不直接从R进行一些系统调用呢?您可以将命令写入文件,并使用system在该文件上调用dot,并将结果读回R.

事实上,这是knitr的作用。您可以非常轻松地使用knitr dot引擎并将其包装到您自己的函数中 - 请参阅 https://github.com/yihui/knitr/blob/master/R/engine.R#L144

答案 1 :(得分:1)

当前版本的knitr(v1.5)无法实现,但在下一个尚未发布的版本(v1.6)中也是如此。如果您使用development version on Github,您实际上可以通过code选项将源代码分配给代码块,例如

<<dot-ex,  engine = "dot", code = dotFun()>>=
@

news for v1.6中的更多内容。