Quiero redirigir todo el texto de la consola a un archivo. Esto es lo que probé:
> sink("test.log", type=c("output", "message"))
> a <- "a"
> a
> How come I do not see this in log
Error: unexpected symbol in "How come"
Esto es lo que obtuve en test.log:
[1] "a"
Esto es lo que quiero en test.log:
> a <- "a"
> a
[1] "a"
> How come I do not see this in log
Error: unexpected symbol in "How come"
¿Qué estoy haciendo mal? ¡Gracias!
Respuestas:
Tienes que hundir "salida" y "mensaje" por separado (la
sink
función solo mira el primer elemento detype
)Ahora, si desea que la entrada también se registre, colóquela en un script:
script.R
1:5 + 1:3 # prints and gives a warning stop("foo") # an error
Y en el aviso:
con <- file("test.log") sink(con, append=TRUE) sink(con, append=TRUE, type="message") # This will echo all input and not truncate 150+ character lines... source("script.R", echo=TRUE, max.deparse.length=10000) # Restore output to console sink() sink(type="message") # And look at the log... cat(readLines("test.log"), sep="\n")
fuente
1:5 + 1:3
, seguida de su salida, luego la siguiente, etc. La razón por la que quiero producir este tipo de registro es porque tengo un programa que necesita más de 30 GBytes de RAM para ejecutarse. Lo ejecuto en la nube de Amazon y guardo los resultados de las regresiones en archivos individuales. Quiero poder encontrar rápidamente el código que produjo cada archivo mirando el registro. Nota: si solo corté y pego la salida de la consola, eso es todo.max.deparse.length
argumento. Actualicé la respuesta.Si tiene acceso a una línea de comando, es posible que prefiera ejecutar su script desde la línea de comando con R CMD BATCH.
== comenzar el contenido del script.R ==
a <- "a" a How come I do not see this in log
== contenido final del script.R ==
En el símbolo del sistema ("$" en muchas variantes un * x, "C:>" en Windows), ejecute
El "&" final es opcional y ejecuta el comando en segundo plano. El nombre predeterminado del archivo de registro tiene "out" agregado a la extensión, es decir, script.
== comenzar el contenido del script.Rout ==
R version 3.1.0 (2014-04-10) -- "Spring Dance" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: i686-pc-linux-gnu (32-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. [Previously saved workspace restored] > a <- "a" > a [1] "a" > How come I do not see this in log Error: unexpected symbol in "How come" Execution halted
== contenido final del script.Rout ==
fuente
R CMD BATCH script.R &
no funciona.No puedes. Como máximo, puede guardar la salida
sink
y la entrada con porsavehistory
separado. O use una herramienta externa comoscript
,screen
otmux
.fuente
Ejecute R en emacs con el modo r de ESS (Emacs Speaks Statistics). Tengo una ventana abierta con mi script y código R. Otro tiene R corriendo. El código se envía desde la ventana de sintaxis y se evalúa. Los comandos, resultados, errores y advertencias aparecen en la sesión de la ventana de R en ejecución. Al final de un período de trabajo, guardo toda la salida en un archivo. Mi propio sistema de nombres es * .R para scripts y * .Rout para guardar archivos de salida. Aquí hay una captura de pantalla con un ejemplo.
fuente
Si puede usar el shell bash, puede considerar simplemente ejecutar el código R desde dentro de un script bash y canalizar los flujos stdout y stderr a un archivo. Aquí hay un ejemplo usando un heredoc:
Archivo:
test.sh
#!/bin/bash # this is a bash script echo "Hello World, this is bash" test1=$(echo "This is a test") echo "Here is some R code:" Rscript --slave --no-save --no-restore - "$test1" <<EOF ## R code cat("\nHello World, this is R\n") args <- commandArgs(TRUE) bash_message<-args[1] cat("\nThis is a message from bash:\n") cat("\n",paste0(bash_message),"\n") EOF # end of script
Luego, cuando ejecuta el script con stderr y stdout canalizados a un archivo de registro:
Otras cosas a tener en cuenta para esto sería intentar simplemente pasar stdout y stderr directamente desde el R heredoc en un archivo de registro; No lo he probado todavía, pero probablemente también funcione.
fuente
Para guardar texto desde la consola: ejecute el análisis y luego elija (Windows) "Archivo> Guardar en archivo".
fuente
Configure sus preferencias de Rgui para una gran cantidad de líneas, luego marque la hora y guárdelo como archivo a intervalos adecuados.
fuente
Si desea recibir mensajes de error
zz <- file("Errors.txt", open="wt") sink(zz, type="message")
la salida será:
Error in print(errr) : object 'errr' not found Execution halted
Esta salida se guardará en un archivo llamado Errores.txt
En caso de que desee imprimir valores de la consola en un archivo, puede usar el argumento 'dividir':
zz <- file("console.txt", open="wt") sink(zz, split=TRUE) print("cool") print(errr)
la salida será:
[1] "cool"
en el archivo console.txt. Entonces toda la salida de su consola se imprimirá en un archivo llamado console.txt
fuente
Puede imprimir en un archivo y al mismo tiempo ver el progreso que tiene (o no),
screen
por ejemplo, mientras ejecuta un script R.En una terminal, pantalla de inicio
ejecuta tu script R
Ir a otra pantalla presionando CtrlA, luegoc
mire su salida con (en tiempo real):
Cambiar entre pantallas con CtrlAluegon
Alternativamente, cuando no use la pantalla, use
R CMD BATCH yourscript.R &
en el paso 2.fuente