Подтвердить что ты не робот

Как сохранить весь вывод консоли в файл в R?

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

== начало содержимого script.R ==

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

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

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

$ R CMD BATCH script.R &

Конечный "&" является необязательным и выполняет команду в фоновом режиме. По умолчанию имя файла журнала имеет "вне", добавленное к расширению, т.е. 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

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

Ответ 3

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

Ответ 4

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

Ответ 5

Если вы можете использовать оболочку bash, вы можете просто запустить R-код из bash script и передать потоки 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 

Затем, когда вы запустите 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 в файл журнала; Я еще не пробовал этого, но он, вероятно, тоже будет работать.

Ответ 6

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

Ответ 7

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

Ответ 8

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

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