Как асинхронно обрабатывать куски кода knitr? - PullRequest
2 голосов
/ 04 ноября 2019

Мне интересно, есть ли способ асинхронно обрабатывать куски кода knitr в документе RMarkdown.

Вот что я имею в виду: представьте себе документ, содержащий сложный анализ данных, разбитый на несколько фрагментов кода, некоторые из которых содержат сложный и поэтому медленный для выполнения код. Эти фрагменты кода не имеют никакой зависимости друг от друга, и их выводом является либо график, таблица, либо какой-либо другой числовой результат, но не любой объект данных, который используется любым другим фрагментом кода.

Было бы здорово, если бы я мог распараллелить обработку этих кусков кода. Как правило, knitr обрабатывает каждый фрагмент кода последовательно, следовательно, возможно, что есть несколько фрагментов кода, которые удерживаются в очереди за фрагментом кода, который медленно обрабатывается. Пакеты R, такие как future и обещания , разрешают асинхронное программирование, и мне было интересно, возможно, это можно использовать для параллельной обработки фрагментов кода knitr параллельно. Я знаю, что, скорее всего, я могу поместить фрагменты медленного кода в отдельные файлы Rmd, а затем в вызове фрагмента кода knitr::knit_child в вызове future::future_map, но было бы лучше хранить все вместе в одном файле. Я также знаю, что можно указать дочерние документы, используя опцию child в блоке кода. Более того, я знаю, что могу повторно использовать куски кода, называя их по имени, используя опцию ref.label. Поэтому меня интересует, существует ли какой-либо способ взлома какой-либо из этих функций (возможно, с использованием future ), чтобы иметь отложенную визуализацию вывода фрагмента кода, когда выполнение передается последующим фрагментам кода. Или что-то типа того. Просто исследуйте пространство возможностей для перехода от последовательных вычислений кусков кода в knitr и использования многоядерной или многосессионной обработки.

...