Diferença: botão "Compilar PDF" no RStudio vs. knit () e knit2pdf ()
Quais são os efeitos colaterais (possivelmente indesejados) do uso deknit()
/knit2pdf()
$2Quais são os efeitos colaterais (possivelmente indesejados) do uso de3$
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 KnitUsandoknit2pdf()
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 objetivoSempre 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()
.
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 osugeridoSys.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 respostaPenso 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.