Quando knitr
elabora un documento, il documento è diviso in due categorie di ingresso: testo e codici ordinari pezzi. Il testo ordinario rimane invariato e viene passato al file di output. Di conseguenza, se il testo normale deve essere incluso dinamicamente, deve essere all'interno di un blocco.
I blocchi di codice vengono valutati in base al loro options. Nello scenario attuale, per la maggior parte le opzioni importanti sono:
eval
determina se un pezzo viene valutata; eval = FALSE
salta il blocco. echo
determina se visualizzare il codice sorgente del blocco. results
determina come viene trattato l'output di un blocco. Per impostazione predefinita (results = "markup
) viene utilizzato un hook di output per applicare il markup specifico del tipo di documento all'output. results = "asis"
significa che tutto l'output è incluso nel file di output "così com'è", senza alcuna modifica.
Con queste tre opzioni, di seguito potrebbe essere realizzato:
This is some text ...
```{r, echo = FALSE, eval = FALSE, results = "asis"}
cat("... with a secret inside ...")
```
```{r, echo = FALSE, eval = TRUE, results = "asis"}
cat("... that is dynamically generated.")
```
uscita:
This is some text ...
... that is dynamically generated.
Si noti che il primo pezzo non è valutato a causa eval = FALSE
.
Tuttavia, è ingombrante a cat()
un sacco di testo da un chunk R. engine
può essere utilizzato per superare questo. Oltre a R, ci sono other engines che possono essere utilizzati per valutare i blocchi, tra cui il motore (attualmente non documentato?) asis
. Questo motore è molto semplice. Da knitr
NEWS file:
aggiunto un nuovo motore denominato asis
per scrivere il contenuto del blocco senza elaborarlo; rispetta anche le opzioni del blocco echo
e eval
- quando uno dei due è FALSE
, il blocco verrà nascosto; ciò rende possibile scrivere testo condizionale
Combinando il motore asis
con il seguente zucchero sintattico (source)
per motori di lingua, la sintassi di R codice Markdown header chunk può essere ```{lang, option=value}`
ora (ad esempio```{python}
e ```{Rcpp}
), che equivale a ```{r, engine='lang', option=value}
l'esempio precedente diventa:
This is some text ...
```{asis, echo = FALSE}
... with a secret inside ...
```
```{asis, echo = TRUE}
... that is dynamically generated.
```
\ 'r cat (c ('testo1,' testo2 ') [x]) \'? – arvi1000
La risposta alla tua domanda è sì, può essere fatta in molti modi. –
@BryanHanson Grazie Bryan, ti dispiace fare un po 'di luce dando uno o due esempi? molto apprezzato. – xappppp