Как сохранить весь вывод консоли в файл в R? - PullRequest
67 голосов
/ 17 августа 2011

Я хочу перенаправить весь текст консоли в файл. Вот что я попробовал:

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

Вот что я получил в test.log:

[1] "a"

Вот что я хочу в test.log:

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

Что я делаю не так? Спасибо!

Ответы [ 8 ]

85 голосов
/ 17 августа 2011

Вы должны обрабатывать «выходные данные» и «сообщения» отдельно (функция sink просматривает только элемент first из type)

Теперь, если вы хотите, чтобы вход также был зарегистрирован, поместите его в скрипт:

script.R

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

И по приглашению:

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")
9 голосов
/ 04 ноября 2014

Если у вас есть доступ к командной строке, вы можете предпочесть запуск скрипта из командной строки с помощью R CMD BATCH.

== начать содержимое скрипта. R ==

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

== конец содержимого скрипта. R ==

В командной строке («$» во многих un * x вариантах, «C:>» в окнах), запустите

$ R CMD BATCH script.R &

Трейлинг "&" является необязательным и запускает команду в фоновом режиме.К имени файла журнала по умолчанию добавлено «out», то есть к script.Rout

== начало содержимого 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

== конец содержимогоof script.Rout ==

3 голосов
/ 17 августа 2011

Вы не можете. Самое большее, вы можете сохранить вывод с помощью sink и ввод с помощью savehistory отдельно. Или используйте внешний инструмент, такой как script, screen или tmux.

2 голосов
/ 12 мая 2016

Запустите R в emacs с помощью r-режима ESS (Emacs Speaks Statistics).У меня есть одно окно с моим скриптом и R-кодом.У другого R работает.Код отправляется из окна синтаксиса и оценивается.Команды, выходные данные, ошибки и предупреждения отображаются в сеансе R-окна.В конце некоторого периода работы я сохраняю весь вывод в файл.Моя собственная система именования - * .R для скриптов и * .Rout для сохранения выходных файлов.Вот скриншот с примером. Screenshot writing and evaluating R with Emacs/ESS.

0 голосов
/ 19 июля 2019

Если вы хотите получить сообщения об ошибках,

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

будет иметь следующий вывод:

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

Этот вывод будет сохранен в файле с именем Errors.txt

Если вы хотите, чтобы в файл выводились значения консоли в файл, вы можете использовать аргумент split:

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

вывод будет:

[1] "cool"

в файле console.txt.Таким образом, весь вывод вашей консоли будет напечатан в файле с именем console.txt

0 голосов
/ 04 декабря 2018

Установите настройки Rgui для большого количества строк, затем отметьте время и сохраните как файл с подходящими интервалами.

0 голосов
/ 28 февраля 2018

Чтобы сохранить текст из консоли: запустите анализ и затем выберите (Windows) «Файл> Сохранить в файл».

0 голосов
/ 28 апреля 2016

Если вы можете использовать оболочку bash, вы можете просто запустить код R из скрипта bash и передать потоки stdout и stderr в файл.Вот пример использования heredoc:

Файл: 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 

Затем, когда вы запускаете сценарий с stderr и stdout, переданным в файл журнала:

$ 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

Другие вещи, на которые стоит обратить внимание, это попытаться просто вставить stdout и stderr прямо из R heredoc в файл журнала;Я еще не пробовал это, но это, вероятно, тоже будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...