2009-07-10 12 views

risposta

45

In realtà le seguenti opere per me:

write("prints to stderr", stderr()) 

write("prints to stdout", stdout()) 
+0

Questo è su Linux, con R 2.8.1 (utilizzando Rscript) – Frank

+1

Questo codice funziona anche su Windows. Per più controllo di formattazione, puoi usare cat invece di scrivere. –

+0

FWIW, questo è limitato, in quanto funziona solo se il primo argomento può essere emesso da 'cat'. Ci sono classi che richiedono 'print' per funzionare, dove devi usare' sink', come dice Galwegian sotto. – Harlan

7

È possibile configurare la funzione di stampa per stampare su stderr?

From Ripley himself:

No, ma dove lo standard output va è controllata da lavabo(), in modo da poter ottenere lo stesso effetto. R internamente non ha idea di quale output provenga da print() (che non è solo una funzione ma centinaia di metodi).

7

Ecco una versione più flessibile per il debug/uso verbose in rscript. Non solo stampa a stderr come chiedete, ma consente anche di passare un numero variabile di argomenti, tipi ecc. Come fa printf.

v <- function(...) cat(sprintf(...), sep='', file=stderr()) 

Ora si possono fare cose come:

v("name: %s age: %d\n", name, age) 

ecc

+0

Questo è fantastico !!! Per quelli che non hanno capito il ..., fai riferimento a questo ... http://stackoverflow.com/questions/3057341/how-to-use-rs-ellipsis-feature-when-writing-your-own-function – myloginid

0
message('for writing diagnostic info to standard error') 

messaggio viene utilizzato per la generazione di messaggi di diagnostica 'semplici' che non sono né avvertimenti né errori, ma tuttavia rappresentato come condizioni. A differenza degli avvertimenti e degli errori, una nuova riga finale viene considerata parte del messaggio ed è facoltativa. Il gestore predefinito invia il messaggio alla connessione stderr().