2009-07-10 12 views

Respuesta

45

En realidad, las siguientes obras para mí:

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

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

Esto está en Linux, con R 2.8.1 (usando Rscript) – Frank

+1

Este código también funciona en Windows. Para obtener más control de formato, puede usar cat en lugar de write. –

+0

FWIW, esto es limitado, ya que solo funciona si 'cat' puede generar el primer argumento. Hay clases que requieren 'print' para funcionar, donde tienes que usar' sink', como dice Galwegian a continuación. – Harlan

7

¿Es posible configurar la función de impresión para imprimir en stderr?

From Ripley himself:

No, pero ¿dónde está la salida estándar va controlado por el fregadero(), por lo que puede lograr el mismo efecto. R internamente no tiene idea de qué salida proviene de print() (que no es solo una función pero cientos de métodos).

7

Aquí hay una versión más flexible para la depuración/uso detallado en RSCRIPT. No solo se imprime al stderr como usted pregunta, sino que también le permite pasar un número variable de argumentos, tipos, etc., como printf.

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

Ahora uno puede hacer cosas como:

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

etc.

+0

Esto es genial! Para los que no entendieron el ..., consulte este .. 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') 

de mensajes se utiliza para generar mensajes de diagnóstico 'simples' que no son ni advertencias ni errores, pero sin embargo, representados como condiciones. A diferencia de las advertencias y los errores, una nueva línea final se considera parte del mensaje y es opcional. El controlador predeterminado envía el mensaje a la conexión stderr().

Cuestiones relacionadas