web-dev-qa-db-fra.com

Comment enregistrer toutes les sorties de la console dans un fichier R?

Je veux rediriger le texte all console dans un fichier. Voici ce que j'ai essayé:

> 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"

Voici ce que j'ai dans test.log:

[1] "a"

Voici ce que je veux dans test.log:

> a <- "a"
> a
[1] "a"
> How come I do not see this in log
Error: unexpected symbol in "How come"

Qu'est-ce que je fais mal? Merci!

62
user443854

Vous devez recevoir séparément "sortie" et "message" (la fonction sink ne regarde que l'élément premier de type)

Maintenant, si vous voulez que le input soit également enregistré, mettez-le dans un script:

script.R

1:5 + 1:3   # prints and gives a warning
stop("foo") # an error

Et à l'invite: 

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")
80
Tommy

Si vous avez accès à une ligne de commande, vous préférerez peut-être exécuter votre script à partir de la ligne de commande avec R CMD BATCH.

== commence le contenu de script.R ==

a <- "a"
a
How come I do not see this in log

== fin du contenu de script.R == 

A la commande Invite ("$" dans de nombreuses variantes un * x, "C:>" dans Windows), exécutez

$ R CMD BATCH script.R &

Le "&" final est facultatif et exécute la commande en arrière-plan . Le nom par défaut du fichier journal est ajouté à l'extension, c'est-à-dire, script.Rout. 

== commence le contenu de 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

== fin du contenu de script.Rout ==

9
WMash

Tu ne peux pas. Tout au plus, vous pouvez enregistrer la sortie avec sink et entrer avec savehistory séparément. Ou utilisez un outil externe tel que script, screen ou tmux

3
mbq

Exécutez R dans emacs avec ESS (Emacs Speaks Statistics) en mode r. J'ai une fenêtre ouverte avec mon script et le code R. Un autre a R en cours d'exécution. Le code est envoyé à partir de la fenêtre de syntaxe et évalué. Les commandes, la sortie, les erreurs et les avertissements apparaissent tous dans la session R en cours. À la fin d'une période de travail, j'enregistre toutes les sorties dans un fichier. Mon propre système de nommage est * .R pour les scripts et * .Rout pour enregistrer les fichiers de sortie . Voici une capture d'écran avec un exemple.  Screenshot writing and evaluating R with Emacs/ESS.

1
Brian Flaherty

Si vous voulez recevoir des messages d'erreur

zz <- file("Errors.txt", open="wt")
sink(zz, type="message")

la sortie sera:

Error in print(errr) : object 'errr' not found
Execution halted

Cette sortie sera enregistrée dans un fichier nommé Errors.txt

Si vous souhaitez imprimer les valeurs de la console dans un fichier, vous pouvez utiliser l'argument 'split':

zz <- file("console.txt", open="wt")
sink(zz,  split=TRUE)
print("cool")
print(errr)

la sortie sera:

[1] "cool"

dans le fichier console.txt. Donc, toutes les sorties de votre console seront imprimées dans un fichier nommé console.txt

0
Prateek Sharma

Pour enregistrer du texte à partir de la console: lancez l'analyse, puis choisissez (Windows) "Fichier> Enregistrer dans un fichier".

Définissez vos préférences Rgui pour un grand nombre de lignes, puis horodatage et sauvegarde en tant que fichier à des intervalles appropriés.

0
Alan Engel

Si vous pouvez utiliser le shell bash, vous pouvez simplement exécuter le code R à partir d'un script bash et rediriger les flux stdout et stderr vers un fichier. Voici un exemple utilisant un heredoc:

Fichier: 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 

Ensuite, lorsque vous exécutez le script avec stderr et stdout dans un fichier journal:

$ chmod +x test.sh
$ ./test.sh
$ ./test.sh &>test.log
$ cat test.log
Hello World, this is bash
Here is some R code:

Hello World, this is R

This is a message from bash:

 This is a test

Il faudrait également essayer d’extraire simplement stdout et stderr du R heredoc dans un fichier journal; Je n'ai pas encore essayé, mais cela fonctionnera probablement aussi.

0
user5359531