Разница: кнопка «Компилировать PDF» в RStudio и knit () и knit2pdf ()

TL; DR

Каковы (возможно нежелательные) побочные эффекты использованияknit()/knit2pdf() вместо «Компилировать PDF»1 кнопка в RStudio?

мотивация

Большинство пользователейknitr кажется, что они пишут свои документы в RStudio и компилируют документы, используя кнопку «Compile PDF» / «Knit HTML». Это работает плавно в большинстве случаев, но время от времени существуют особые требования, которые невозможно выполнить с помощью кнопки компиляции. В этих случаях решение обычно заключается вknit()/knit2pdf()/rmarkdown::render() (или аналогичные функции) напрямую.

Некоторые примеры:

Как связать / Sweave с другим именем файла?Есть ли способ связать уценку прямо из вашего рабочего пространства, используя RStudio?Вставьте дату в имя файла при вязании документа с помощью кнопки RStudio Knit

С помощьюknit2pdf() Вместо кнопки «Компилировать PDF» обычно предлагается простое решение таких вопросов. Однако это имеет цену: есть принципиальная разница, что «Компилировать PDF» обрабатывает документв отдельном процессе и среде в то время какknit2pdf() а друзья нет.

Это имеет значение, и проблема в том, что не все эти последствия очевидны. Принять тот факт, чтоknit() использует объекты из глобальной среды (в отличие от «Compile PDF») в качестве примера. Это может быть очевидно, и желаемое поведение в случаях, как второй пример выше, но этонеожиданное последствие когдаknit() используется для преодоления проблем, как в примере 1 и 3.

Кроме того, есть более тонкие различия:

рабочий каталог не может быть установлен, как ожидалось.Пакеты должны быть загружены.Некоторые параметры, которые обычно устанавливаются RStudio, могут иметьнеожиданные значения.Вопрос и его цель

Всякий раз, когда я читаю / пишу совет, чтобы использоватьknit2pdf() вместо "Компилировать PDF", я думаю«правильно, но пользователь должен понимать последствия…».

Таким образом, вопрос здесь:

Каковы (возможно нежелательные) побочные эффекты использованияknit()/knit2pdf() вместо кнопки «Компилировать PDF» в RStudio?

Если на этот вопрос был исчерпывающий ответ (вики-сообщество?), Его можно было бы связать в будущих ответах, которые предлагают использоватьknit2pdf().

Смежные вопросы

Есть десятки связанных с этим вопросов. Тем не менее, они либо предлагают только код для (более или менее) воспроизведения поведения кнопки RStudio, либо объясняют, что «в основном» происходит, не упоминая возможные подводные камни. Другие выглядят как очень похожие вопросы, но оказываются (очень) особым случаем. Некоторые примеры:

Knit2html не воспроизводит функциональность кнопки Knit HTML в R Studio: Проблема кешированияВыводы HTML различаются между использованием knitr в Rstudio и knit2html в командной строке: Уценка версий.Как конвертировать 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.

Ответы на вопрос(1)

Ваш ответ на вопрос