Итак, я не нашел альтернативы subchunkify()
, однако я решил проблему с повторным использованием одних и тех же графиков на каждой l oop итерации (хотя я еще не вникал, почему это было).
Я добавил аргумент id
к subchunkify()
и включил его в имя файла, а затем в моем цикле / карте я создал значение id
, которое было бы комбинацией переменных в каждой итерации, которая быть уникальным для каждого.
subchunkify <- function(g, fig_height=7, fig_width=5, id = NULL) {
g_deparsed <- paste0(deparse(
function() {g}
), collapse = '')
sub_chunk <- paste0("
`","``{r sub_chunk_", id, "_", floor(runif(1) * 10000), ", fig.height=", fig_height, ", fig.width=", fig_width, ", echo=FALSE}",
"\n(",
g_deparsed
, ")()",
"\n`","``
")
cat(knitr::knit(text = knitr::knit_expand(text = sub_chunk), quiet = TRUE))
}
Поэтому я не уверен, почему runif
в subchunkify
не приводил к отдельным именам файлов на каждой итерации. Я подозреваю, что это как-то связано с тем, как работает кеширование knitr
. Я заметил, что если последующая итерация моего l oop в конечном итоге проходила через ту же условную цепочку для создания графа A, то граф A будет повторно использоваться везде, где соответствует цепочка условий. Однако, если итерация прошла в другой условной ветви для создания графа B, она правильно сгенерировала бы новый граф. (Однако тогда граф B будет повторно использован во всех местах с одним и тем же окончанием условной ветки).
Это все еще не объясняет, почему я ввел уникальное имя файла с id
работает, но использование runif
не Так как в обоих случаях имя файла должно быть уникальным, так что это только предположение.
Так что, я думаю, если у кого-то еще есть проблемы, у меня есть решение, но нет объяснения. Очень неудовлетворительно, но помогает!