2013-12-17 1 views
2

Использование чистой точки внутри куска наряда с двигателем = «точка» прост, но вам нужно написать код точки самостоятельно.Вязаная функция, возвращающая код точки (graphviz) в виде строки

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

Я хочу функцию, чтобы сделать это для меня.

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

, а затем вызвать это внутри вязаного кусок аналогичной функции, которая возвращает код LaTeX и вязать с результатом = «» as.is

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

, но это приводит к следующему: Ошибка в (knit_engines $ get (options $ engine)) (опции): параметр опции chunk. = 'asis' дает то же сообщение об ошибке.

Есть ли способ сделать это?

ответ

1

Это невозможно в текущей версии knitr (v1.5), но будет возможно в следующей версии (v1.6), которая еще не выпущена. Если вы используете development version on Github, вы можете фактически назначить исходный код блоку кода через опцию code, например.

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

Подробнее об этом в news for v1.6.

+0

Это отличная новость Yihui. Большое спасибо за вашу потрясающую работу с Нитром. – Rickard

1

Какую-либо конкретную причину, по которой это нужно оценивать в куске наряда с этим двигателем? Почему бы не сделать это прямо из R с помощью некоторых системных вызовов? Вы можете написать команду в файл и использовать system для вызова dot в этом файле и прочитать результаты обратно в R.

Это, по сути, то, что делает knitr. Вы, вероятно, довольно легко можете взять двигатель и обернуть его в свою собственную функцию - см. https://github.com/yihui/knitr/blob/master/R/engine.R#L144.

+0

Я использую этот подход для создания таблиц и списков в пределах r функций, а затем вывод их по результатам = "as.is". Это похоже на самый простой подход. Я попытался следовать исходному коду Yihui, но мне не хватает навыков r-кодирования. Знаете ли вы о другом примере? То есть запустите внешнюю команду и получите сгенерированный PDF-файл в виде фигуры в коде LaTeX для дальнейшего вязания. – Rickard