Può accadere di volere eliminare i messaggi di avvertimento (warning) che compaiono durante l'esecuzione di uno script. Si prenda ad esempio il codice seguente, che calcola e traccia una regressione antitòna [1]. Copiate e incollate nella Console di R questo script e premete ↵ Invio.
# REGRESSIONE MONOTÒNA (ANTITÒNA) con il pacchetto fdrtool
#
library(fdrtool) # carica il pacchetto per la regressione
bmi <- read.table("c:/Rdati/bmi.csv", header=TRUE, sep=";", row.names="Nazione") # importa i dati
windows() # apre e inizializza una nuova finestra grafica
#
fdr <- monoreg(bmi$obeso, bmi$sovrappeso, type="antitonic") # calcola la regressione antitòna
#
plot(bmi$obeso, bmi$sovrappeso, main="Regressione monotòna (antitòna)", xlab="Soggetti obesi in %", ylab="Soggetti sovrappeso in %") # riporta il grafico con la distribuzione dei dati
lines(fdr$x, fdr$yf, col="red") # sovrappone la regressione
#
Dopo avere caricato il pacchetto e i dati, durante il calcolo della regressione mediante la funzione monoreg() compaiono alcuni messaggi di avvertimento
Messaggi di avvertimento:
1: In monoreg(bmi$obeso, bmi$sovrappeso, type = "antitonic") :
Duplicated x value (x=14) detected!
The corresponding weights and y values will be merged.
2: In monoreg(bmi$obeso, bmi$sovrappeso, type = "antitonic") :
Duplicated x value (x=18.7) detected!
The corresponding weights and y values will be merged.
3: In monoreg(bmi$obeso, bmi$sovrappeso, type = "antitonic") :
Duplicated x value (x=17.3) detected!
The corresponding weights and y values will be merged.
che avvertono che alcuni valori in ascisse sono duplicati. In effetti nei dati della variabile obeso che potete visualizzare digitando bmi compare due volte il valore 14.0 e due volte compaiono anche i valori 17.3 e 18.7. Ma non si tratta di un problema in quanto per questi valori la funzione provvede automaticamente a unire le y corrispondenti come riportato nel manuale del pacchetto [2]. Lo script è corretto e non presenta problemi, quindi la domanda: possiamo eliminare i messaggi di avvertimento? La risposta è sì, vediamo tre metodi per farlo.
1) I warning vengono soppressi limitatamente al codice incluso all'interno della funzione:
suppressWarnings(... codice per il quale i warning sono soppressi ...)
Esempio:
# REGRESSIONE MONOTÒNA (ANTITÒNA) con il pacchetto fdrtool
#
library(fdrtool) # carica il pacchetto per la regressione
bmi <- read.table("c:/Rdati/bmi.csv", header=TRUE, sep=";", row.names="Nazione") # importa i dati
windows() # apre e inizializza una nuova finestra grafica
#
fdr <- suppressWarnings(monoreg(bmi$obeso, bmi$sovrappeso, type="antitonic")) # calcola la regressione antitòna
#
plot(bmi$obeso, bmi$sovrappeso, main="Regressione monotòna (antitòna)", xlab="Soggetti obesi in %", ylab="Soggetti sovrappeso in %") # riporta il grafico con la distribuzione dei dati
lines(fdr$x, fdr$yf, col="red") # sovrappone la regressione
#
In questo caso:
→ per tutto il codice esterno alla funzione suppressWarnings() viene mantenuta e applicata la configurazione warning originale.
2) I warning sono soppressi globalmente:
options(warn=-1)
Esempio:
# REGRESSIONE MONOTÒNA (ANTITÒNA) con il pacchetto fdrtool
#
library(fdrtool) # carica il pacchetto per la regressione
bmi <- read.table("c:/Rdati/bmi.csv", header=TRUE, sep=";", row.names="Nazione") # importa i dati
windows() # apre e inizializza una nuova finestra grafica
options(warn=-1)
#
fdr <- monoreg(bmi$obeso, bmi$sovrappeso, type="antitonic") # calcola la regressione antitòna
#
plot(bmi$obeso, bmi$sovrappeso, main="Regressione monotòna (antitòna)", xlab="Soggetti obesi in %", ylab="Soggetti sovrappeso in %") # riporta il grafico con la distribuzione dei dati
lines(fdr$x, fdr$yf, col="red") # sovrappone la regressione
#
In questo caso potete:
→ chiudere la sessione di R e salvare l'area di lavoro lasciando che la soppressione dei warning rimanga attiva nelle sessioni successive;
→ chiudere la sessione di R e NON salvare l'area di lavoro per evitare che la soppressione dei warning rimanga attiva nelle sessioni successive;
→ ripristinare subito i warning di default digitando options(warn=0).
3) I warning sono soppressi globalmente:
wconfig <- getOption("warn")
options(warn=-1)
... codice per il quale i warning sono soppressi ...
options(warn=wconfig)
Esempio:
# REGRESSIONE MONOTÒNA (ANTITÒNA) con il pacchetto fdrtool
#
library(fdrtool) # carica il pacchetto per la regressione
bmi <- read.table("c:/Rdati/bmi.csv", header=TRUE, sep=";", row.names="Nazione") # importa i dati
windows() # apre e inizializza una nuova finestra grafica
wconfig <- getOption("warn") # salva la configurazione corrente
options(warn=-1) # sopprime i warning
#
fdr <- monoreg(bmi$obeso, bmi$sovrappeso, type="antitonic") # calcola la regressione antitòna
#
plot(bmi$obeso, bmi$sovrappeso, main="Regressione monotòna (antitòna)", xlab="Soggetti obesi in %", ylab="Soggetti sovrappeso in %") # riporta il grafico con la distribuzione dei dati
lines(fdr$x, fdr$yf, col="red") # sovrappone la regressione
#
options(warn=wconfig) # ripristina la configurazione corrente
#
In questo caso:
→ DOPO avere salvato la configurazione preesistente con getOption("warn") i warning sono soppressi globalmente con options(warn=-1);
→ al termine dell'esecuzione del codice che ne prevede la soppressione o comunque al termine dello script i warning sono ripristinati nella configurazione preesistente – che ovviamente si assume essere quella desiderata.
----------
[1] Vedere il post Regressione con una funzione monotòna (antitòna).
[2] A pagina 14 del Reference manual del pacchetto fdrtool è riportato: "If several identical x values are given as input, the corresponding y values and the weights w are automatically merged, and a warning is issued".
https://cran.r-project.org/web/packages/fdrtool/fdrtool.pdf
Nessun commento:
Posta un commento