non vedo una soluzione semplice di rinviare la valutazione di \Sexpr
dopo valutazione dei blocchi di codice, ma è ancora facile da usare \Sexp
con valori definiti successivamente, ad esempio, un abstract: utilizzare un file separato (myabstract.Rnw
) per l'abstract, aggiungere \input{myabstract}
dove l'abstract è suppo sed da includere e knit
myabstract.Rnw
alla fine del documento principale:
document.Rnw
:
\documentclass{article}
\begin{document}
\begin{abstract}
\input{myabstract}
\end{abstract}
Main text.
<<>>=
answer <- 42
@
\end{document}
<<include = FALSE>>=
knit("myabstract.Rnw")
@
myabstract.Rnw
:
The answer is \Sexpr{answer}.
chiave per capire come questo funziona è quello di rendersi conto che knitr
elabora il documento prima che LaTeX lo faccia. Pertanto, non importa che il comando LaTeX \input{myabstract}
includa myabstract.tex
"prima" (non riferendosi all'ora ma facendo riferimento al numero di riga), knit("myabstract.Rnw")
genera myabstract.tex
.
Per scenari più complessi, la valutazione e l'uscita potrebbe essere separati: fare tutti i calcoli nei primi pezzi e stampare i risultati a cui appartengono. Per mostrare il codice sorgente, blocchi reuse (impostazione eval = FALSE
). Utilizzando l'esempio dall'alto, il che significa:
\documentclass{article}
\begin{document}
<<calculation, include = FALSE>>=
answer <- 42
@
\begin{abstract}
The answer is \Sexpr{answer}.
\end{abstract}
Main text.
<<calculation, eval = FALSE>>=
@
\end{document}
fonte
2016-03-09 11:35:19
probabilmente dovrete eseguire due passaggi attraverso il documento, salvare il roba che vuoi dai calcoli successivi, e ricaricarlo all'inizio. –
È normale. Nel tuo primo esempio hai definito "valore" prima di chiamarlo in \ Sexpr {}; quindi esiste nel tuo spazio di lavoro e può essere chiamato. E nel tuo secondo esempio chiami variabile inesistente; quindi devi prima definirlo o caricare uno spazio di lavoro in cui esiste. –