Diferença: botão "Compilar PDF" no RStudio vs. knit () e knit2pdf ()

TL; DR

Quais são os efeitos colaterais (possivelmente indesejados) do uso deknit()/knit2pdf()$2Quais são os efeitos colaterais (possivelmente indesejados) do uso de3$

Motivação

A maioria dos usuários deknitr parecem escrever seus documentos no RStudio e compilar os documentos usando o botão "Compilar PDF" / "Knit HTML". Isso funciona sem problemas na maioria das vezes, mas de vez em quando existem requisitos especiais que não podem ser alcançados usando o botão de compilação. Nesses casos, a solução geralmente é chamarknit()/knit2pdf()/rmarkdown::render() (ou funções similares) diretamente.

Alguns exemplos:

Como tricotar / Sweave com um nome de arquivo diferente?Existe uma maneira de reduzir a marcação diretamente do seu espaço de trabalho usando o RStudio?Insira a data no nome do arquivo enquanto tricota o documento usando o botão RStudio Knit

Usandoknit2pdf() em vez do botão "Compilar PDF" geralmente oferece uma solução simples para essas perguntas. No entanto, isso tem um preço: existe a diferença fundamental de que "Compilar PDF" processa o documentoem um processo e ambiente separados enquanto queknit2pdf() e amigos não.

Isso tem implicações e o problema é que nem todas essas implicações são óbvias. Tome o fato de queknit() usa objetos do ambiente global (enquanto "Compilar PDF" não)) como exemplo. Isso pode ser óbvio e o comportamento desejado em casos como o segundo exemplo acima, mas é umconseqüência inesperada quandoknit() é usado para superar problemas como nos exemplos 1 e 3.

Além disso, existem diferenças mais sutis:

odiretório de trabalho pode não estar definido conforme o esperado.Os pacotes precisam ser carregados.Algumas opções normalmente definidas pelo RStudio podem tervalores inesperados.A pergunta e seu objetivo

Sempre que leio / escrevo os conselhos de usoknit2pdf() em vez de "Compilar PDF", acho"correto, mas o usuário deve entender as consequências ...".

Portanto, a questão aqui é:

Quais são os efeitos colaterais (possivelmente indesejados) do uso deknit()/knit2pdf() em vez do botão "Compilar PDF" no RStudio?

Se houvesse uma resposta abrangente (wiki da comunidade?) Para essa pergunta, ela poderia ser vinculada em respostas futuras que sugerem o uso deknit2pdf().

Perguntas relacionadas

Existem dezenas de perguntas relacionadas a esta. No entanto, eles propõem apenas código para (mais ou menos) reproduzir o comportamento do botão RStudio ou explicam o que "basicamente" acontece sem mencionar as possíveis armadilhas. Outros parecem perguntas muito semelhantes, mas acabam sendo um caso (muito) especial. Alguns exemplos:

Knit2html não replica a funcionalidade do botão Knit HTML no R Studio: Problema de armazenamento em cache.As saídas HTML são diferentes entre o uso de knitr no Rstudio e knit2html na linha de comando: Versões Markdown.Como converter R Markdown para HTML? Ou seja, o que o "Knit HTML" faz no Rstudio 0.96?: Resposta bastante superficial de Yihui (explica o que "basicamente" acontece) e algumas opções de como reproduzir o comportamento do botão RStudio. Nem osugerido Sys.sleep(30) nemo log "Compilar PDF" são perspicazes (ambas as dicas apontam para a mesma coisa).O que o “Knit HTML” faz no Rstudio 0.98?: Reproduz o comportamento do botão.Sobre a resposta

Penso que esta questão levantou muitas das questões que deveriam fazer parte de uma resposta. No entanto, pode haver muitos outros aspectos que eu não conheço, e é por isso que reluto em responder a essa pergunta (embora eu tente se ninguém responder).

Provavelmente, uma resposta deve cobrir três pontos principais:

A nova sessão versus o problema da sessão atual (opções globais, diretório de trabalho, pacotes carregados,…).Uma consequência do primeiro ponto: o fato de queknit() usa objetos do ambiente de chamada (padrão:envir = parent.frame()) e implicações para a reprodutibilidade. Tentei abordar a questão da prevençãoknit() de usar objetos de fora do documento emesta resposta (segundo ponto).Coisas que o RStudio secretamente faz…… Ao iniciar uma sessão interativa (exemplo) -> Não disponível ao pressionar "Compilar PDF"... ao pressionar "Compilar PDF" (algo especial além da nova sessão com o diretório de trabalho definido como o arquivo processado?)

Não tenho certeza da perspectiva correta sobre o assunto. Eu acho que tanto "O que acontece quando clico em 'Compilar PDF' + implicações" quanto em "O que acontece quando eu usoknit() + implicações "é uma boa abordagem para resolver a questão.

1 O mesmo se aplica ao botão "Knit HTML" ao escrever documentos RMD.