Ricerca Sociale con R

Una wiki per l'analisi dei dati con R

Strumenti Utente

Strumenti Sito


r:scrittura_accademica:knitr-spin-purl

Dagli script ai report e viceversa

E' possibile creare un report dinamico direttamente a partire dallo script R. Questo può essere comodo per avere sia un report che uno script pienamente eseguibile con source(), cioè tutto assieme.

Per trasformare lo script in un file RMarkdown o Quarto (o altri formati), possiamo usare la funzione knitr::spin().

Se, al contrario, vogliamo ottenere uno script R da un file RMarkdown, possiamo usare knitr::purl() (purl significa infatti 'rovescio', nel linguaggio della maglia – knitting)

Dallo script al report

Da uno script R è possibile compilare direttamente un report, da menu (l'icona del block notes) o da riga di comando.

Diciamo che lo script sia il seguente:

# questo è un commento
summary(cars)
 
#' questo è un **testo** vero e proprio.
 
plot(cars)

Il report conterrà il codice, il risultato, i commenti e (volendo) testo in markdown, preceduto da #' 1).

Da linea di comando:

rmarkdown::render("script.R")
rmarkdown::render("script.R", "pdf_document")

Dallo script a RMarkdown

Per trasformare lo script in un report, rmarkdown usa la funzione spin(), che può essere usata direttamente per creare un documento in diversi formati, fra cui: “Rmd” (RMarkdown) e “qmd” (Quarto)

  • i testi preceduti da #' vengono conservati come testi normali (possono essere scritti in markdown);
  • le opzioni per i blocchi di testo sono commenti indicati da #+ or #- (#+ label, opt1=value1, opt2=value2)

A partire dallo script:

# questo è un commento
summary(cars)
 
#' questo è un testo vero e proprio
 
#+ echo=FALSE
# questo è un blocco con opzione
plot(cars)

Con knitr::spin('script.R') otterremo un file Markdown (un report in markdown, ovvero l'output di default per Rmd). Ma indicando knit = FALSE, il risultato sarà il file intermedio:

knitr::spin('script.R', knit = FALSE)

otteremo il seguente file Rmd:

```{r}
# questo è un commento
summary(cars)
```
 
questo è un testo vero e proprio
 
```{r echo=FALSE}
# questo è un blocco con opzione
plot(cars)
```

Per avere un file Quarto, scriveremo:

knitr::spin('script.R', format = 'qmd', knit = FALSE)

Da RMarkdown allo script

Sintassi simile ha la funzione knitr::purl. Eseguendo:

knitr::purl('file.Rmd')

Otterremo il seguente script (con tutti i commenti e la documentazione):

## -----------------------------------------------------------------
# questo è un commento
summary(cars)
 
 
## ----echo=FALSE---------------------------------------------------
# questo è un blocco con opzione
plot(cars)

Possiamo controllare quanti commenti e opzioni dei blocchi mantenere nello script, con l'argomento documentation:

  • 0 = solo il codice;
  • 1 (default) = aggiunge le opzioni dei blocchi di codice, rendendole sezioni dello script (vedi sezioni_di_codice)
  • 2 = aggiunge tutti i blocchi di testo come roxygen comments.

Confronto

Funzione Direzione Input Output Scopo
knitr::spin() Script → Report File .R File .Rmd` o `.qmd Generare un report dinamico
knitr::purl() Report → Script File .Rmd o .qmd File .R Estrarre lo script dal report

Curiosità: i nomi delle funzioni richiamano la terminologia del lavoro a maglia (“knit”, “spin”, “purl”), per rafforzare il parallelismo tra codice e tessitura narrativa.

Quando usarle?

  • Spin: Per presentare codice e risultati con contesto descrittivo, pronto per la pubblicazione, senza fare copia e incolla dallo script.
  • Purl: Per avere un file .R pulito per eseguire o condividere il codice analitico.


1)
#' è il marker per i commenti Roxygen, il linguaggio usato per creare la documentazione di pacchetti e funzioni.

Domande? Scrivimi

Messenger Telegram Email
r/scrittura_accademica/knitr-spin-purl.txt · Ultima modifica: 29/10/2025 13:44 da Agnese Vardanega