So che la funzione sink()
può essere utilizzata per deviare l'output R in un file, ad es.Sink non rilascia file
sink('sink-closing.txt')
cat('Hello world!')
sink()
C'è un semplice comando per chiudere tutti i lavelli in sospeso?
Di seguito, elaboro la mia domanda.
Supponiamo che il mio script R apre sink()
in uno script R, ma c'è un errore nello script R che si verifica prima che lo script chiuda lo sink()
. Posso eseguire lo script R più volte, cercando di correggere l'errore. Infine, voglio chiudere tutti i lavandini e stampare sulla console. Come faccio a farlo?
Infine, nell'interesse della concretezza, fornisco un MWE per illustrare il problema che affronto.
Per prima cosa, scrivo uno script R sink-closing.R
che presenta un errore.
sink('sink-closing.txt')
foo <- function() {
cat(sprintf('Hello world! My name is %s\n',
a.variable.that.does.not.exist))
}
foo()
sink()
Successivamente, ho source
le più volte R-script, dicono 3 volte per errore mentre cerco di trovare e correggere il bug.
> source('~/Dropbox/cookbook/r-cookbook/sink-closing.R')
Error in sprintf("Hello world! My name is %s\n", a.variable.that.does.not.exist) :
object 'a.variable.that.does.not.exist' not found
Ora, supponiamo di eseguire il debug dello script R e di voler stampare sulla console. Posso chiamare più volte sink()
per chiudere i lavandini precedenti. Se lo chiamo 3 volte, posso finalmente stampare sulla console come prima. Ma come faccio a sapere quanti lavandini devo chiudere?
È possibile utilizzare 'sink.number'? – mnel