TL; DR
Каковы (возможно нежелательные) побочные эффекты использования knit()
/knit2pdf()
вместо "Compile PDF" 1 кнопка в RStudio?
мотивация
Кажется, что большинство пользователей knitr
пишут свои документы в RStudio и компилируют документы, используя кнопку "Compile PDF"/"Knit HTML". Это работает плавно в большинстве случаев, но время от времени существуют особые требования, которые невозможно выполнить с помощью кнопки компиляции. В этих случаях решение, как правило, для вызова knit()
/knit2pdf()
/rmarkdown::render()
(или аналогичные функции) непосредственно.
Некоторые примеры:
- Как связать /Sweave с другим именем файла?
- Есть ли способ связать уценку прямо из вашего рабочего пространства, используя RStudio?
- Вставьте дату в имя файла при вязании документа с помощью кнопки RStudio Knit
Использование knit2pdf()
вместо кнопки "Compile PDF" обычно предлагает простое решение таких вопросов. Однако это имеет свою цену: есть принципиальная разница, что "Компилировать PDF" обрабатывает документ в отдельном процессе и среде, тогда как knit2pdf()
и друзья этого не делают.
Это имеет значение, и проблема в том, что не все эти последствия очевидны. Возьмем тот факт, что knit()
использует объекты из глобальной среды (в отличие от "Compile PDF") в качестве примера. Это может быть очевидным и желаемым поведением в случаях, подобных второму примеру выше, но это неожиданное последствие, когда knit()
используется для преодоления проблем, как в примерах 1 и 3.
Кроме того, есть более тонкие различия:
- Рабочий каталог может быть установлен не так, как ожидалось.
- Пакеты должны быть загружены.
- Некоторые параметры, которые обычно устанавливаются RStudio, могут иметь неожиданные значения.
Вопрос и его цель
Всякий раз, когда я читаю/пишу совет использовать knit2pdf()
вместо "Compile PDF", я думаю, что "правильно, но пользователь должен понимать последствия…".
Таким образом, вопрос здесь:
Каковы (возможно нежелательные) побочные эффекты использования
knit()
/knit2pdf()
вместо кнопки "Compile PDF" в RStudio?
Если на этот вопрос был исчерпывающий ответ (вики-сообщество?), knit2pdf()
можно было бы связать в будущих ответах, предлагающих использовать knit2pdf()
.
Смежные вопросы
Есть десятки связанных с этим вопросов. Тем не менее, они либо предлагают только код для (более или менее) воспроизведения поведения кнопки RStudio, либо объясняют, что "в основном" происходит, не упоминая возможные подводные камни. Другие выглядят как очень похожие вопросы, но оказываются (очень) особым случаем. Некоторые примеры:
- Knit2html не воспроизводит функциональность кнопки Knit HTML в R Studio: проблема с кэшированием.
- Выводы HTML различаются при использовании knitr в Rstudio и knit2html в командной строке: версии Markdown.
- Как конвертировать R Markdown в HTML? Т.е. что делает "Вязание HTML" в Rstudio 0.96? Скорее поверхностный ответ Yihui (объясняет, что "в основном" происходит) и некоторые варианты воспроизведения поведения кнопки RStudio. Ни предлагаемый
Sys.sleep(30)
ни журнал "Compile PDF" не являются проницательными (обе подсказки указывают на одно и то же). - Что делает "Вязание HTML" в Rstudio 0.98? : Воспроизвести поведение кнопки.
Об ответе
Я думаю, что этот вопрос поднял многие вопросы, которые должны быть частью ответа. Однако, может быть, есть еще много аспектов, о которых я не знаю, из-за чего я не хочу самостоятельно отвечать на этот вопрос (хотя я могу попробовать, если никто не ответит).
Вероятно, ответ должен охватывать три основных момента:
- Новый сеанс против текущей проблемы сеанса (глобальные параметры, рабочий каталог, загруженные пакеты и т.д.).
- Следствие из первого пункта: тот факт, что
knit()
использует объекты из вызывающей среды (по умолчанию:envir = parent.frame()
) и последствия для воспроизводимости. В этом ответе я попытался решить проблему предотвращения использованияknit()
объектов извне документа (второй пункт). - Вещи RStudio тайно делает...
- … При запуске интерактивного сеанса (пример) → Недоступно при нажатии "Компилировать PDF"
- … При нажатии "Компилировать PDF" (что-нибудь особенное, кроме нового сеанса с рабочим каталогом, в котором установлен файл, обработанный?)
Я не уверен в правильном взгляде на проблему. Я думаю, что "Что происходит, когда я нажимаю" Компилировать PDF "+ последствия", а также "Что происходит, когда я использую knit()
+ последствия", - это хороший подход к решению этого вопроса.
1 То же самое относится к кнопке "Вязать HTML" при написании документов RMD.