Knitr: как установить параметры пакета в зависимости от типа вывода

Я начинаю использовать пакет knitr в качестве компонента рабочего процесса для создания отчетов HTML и PDF из входного файла Markdown.
Я хотел бы установить некоторые параметры пакета knitr, специально адаптированные к формату выходного файла. В настоящее время я вручную переключаю следующие две строки:

<!--roptions dev='png', fig.width=300px, fig.height=200px" -->
<!--roptions dev='pdf', fig.width=5, fig.height=4 -->

Можно ли автоматически сообщить Knitr, какой набор параметров использовать в зависимости от типа вывода?

Спасибо.


person mbask    schedule 20.03.2012    source источник
comment
Вы можете использовать pandoc с knitr для создания html и pdf из одного и того же файла markdown. Скоро выложу пример.   -  person Ramnath    schedule 20.03.2012
comment
это также то, что я начал делать в последнее время; вы можете использовать раздел 3.5 в руководстве: github.com/downloads/yihui /knitr/knitr-manual.pdf (назначьте переменные вместо фиксированных значений параметрам фрагмента), и я считаю, что Рамнат может показать вам хороший рабочий процесс. Кстати, fig.width=300px недействителен; он всегда должен быть числовым (единица измерения в дюймах): yihui.name/knitr/options   -  person Yihui Xie    schedule 21.03.2012
comment
Спасибо Рамнатх и @Yihui. Я придумал довольно неуклюжее решение, позволив Knitr создавать изображения в одном из двух форматов (скажем, в формате pdf). Затем в Makefile конвертируйте все изображения в png (ImageMagick), найдите вхождения .pdf и замените их на .png в связанном файле (с помощью sed) и, наконец, переведите его в html. Это соответствующая часть Makefile, которую я придумал: html:knit convert Rplots/*.pdf Rplots/*.png sed 's/.pdf/.png/g' $(DOCUMENTNAME).md › $(DOCUMENTNAME)- html.md pandoc -s --toc -c report.css $(ИМЯ ДОКУМЕНТА)-html.md -o $(ИМЯ ДОКУМЕНТА).html rm $(ИМЯ ДОКУМЕНТА)-html.md   -  person mbask    schedule 21.03.2012
comment
знаете ли вы, что с последней версией knitr вы действительно можете использовать вектор устройств? например dev=c('png','pdf') таким образом, одним выстрелом будут созданы два формата; Makefile должен быть хорошим способом, но преобразование из pdf в png может не понадобиться; У меня также есть еще один неуклюжий подход, который я жду, когда Рамнат исправит его на github.com/yihui/knitr- книга, но вы можете видеть, как я работал с разными форматами вывода   -  person Yihui Xie    schedule 21.03.2012
comment
Я создал репозиторий github, в котором есть файл source.md и файл makefile, которые можно использовать для создания выходных данных html и pdf. Это говорит само за себя, если вы знаете pandoc и makefiles. Я сделаю README.md, когда позволит время :-). Вот ссылка на репозиторий github.com/ramnathv/knitr-pandoc   -  person Ramnath    schedule 21.03.2012
comment
Спасибо, Рамнат, ваш Makefile просветил меня по настройке параметров вязания. Я решил свою проблему, установив dev, fig.width и fig.height перед вызовом knit. Кстати, -e "pat_gfm()" у меня не сработало, так как Rвыходит с сообщением pat_gfm function not found, это все еще не поддерживается в стабильной ветке вязания?   -  person mbask    schedule 21.03.2012
comment
Рамнат, если хочешь ответить на вопрос, я проверю.   -  person mbask    schedule 21.03.2012
comment
@Yihui, спасибо за ваши усилия по knitr и ваши отличные отзывы.   -  person mbask    schedule 21.03.2012
comment
Для полноты картины pat_gfm() есть в версии 0.4.1.   -  person mbask    schedule 21.03.2012


Ответы (1)


Комментарий @Ramnath предлагает решение для создания pdf и html вывода из уникального Markdown файла путем установки определенных параметров. в knitrв Makefile:

$(PDF): $(SRC) Makefile
Rscript \
  -e "library(knitr)" \
  -e "opts_chunk[['set']](dev = 'pdf')" \
  -e "pat_gfm()" \
  -e "knit('$<', 'temp.md')"
$(PANDOC) temp.md -o $@
rm temp.md

Здесь установлен формат изображений pdf. Обратите внимание, что функция pat_gfm() была добавлена ​​в ветку master на GitHub всего 5 дней назад и еще не выпущена стабильная версия.

Немного уточнив, чтобы полностью ответить на вопрос, размеры изображения можно легко установить, добавив пару строк в Makefile:

-e "opts_chunk[['set']](fig.width = 5)"\
-e "opts_chunk[['set']](fig.height = 5)"\
person mbask    schedule 23.03.2012