web-dev-qa-db-ja.com

すべてのコンソール出力を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"

何が間違っていますか?ありがとう!

68
user443854

「output」と「message」を別々にシンクする必要があります(sink関数は、typeの-​​first要素のみを参照します)

inputもログに記録する場合は、スクリプトに入力します。

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

コマンドラインにアクセスできる場合は、R CMD BATCHを使用してコマンドラインからスクリプトを実行することをお勧めします。

== script.Rのコンテンツを開始==

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

== script.Rのコンテンツの終了==

コマンドプロンプト(多くのun * xバリアントでは "$"、Windowsでは "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

== script.Routのコンテンツの終了==

9
WMash

できません。出力はsinkで保存でき、入力はsavehistoryで個別に保存できます。または、scriptscreen、_tmuxなどの外部ツールを使用します。

3
mbq

RをESS(Emacs Speaks Statistics)rモードでemacsで実行します。スクリプトとRコードで1つのウィンドウを開いています。別のRが実行されています。コードは構文ウィンドウから送信され、評価されます。コマンド、出力、エラー、および警告はすべて、実行中のRウィンドウセッションに表示されます。ある作業期間の終わりに、すべての出力をファイルに保存します。私自身の命名システムは、スクリプト用の* .Rと、出力ファイルの保存用の* .Routです。以下にスクリーンショットと例を示します。 Screenshot writing and evaluating R with Emacs/ESS.

2
Brian Flaherty

エラーメッセージを取得したい場合

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
Prateek Sharma

コンソールからテキストを保存するには、分析を実行し、(Windows)[ファイル]> [ファイルに保存]を選択します。

多数の行のRgui設定を設定し、タイムスタンプを付けて、適切な間隔でファイルとして保存します。

0
Alan Engel

Bashシェルを使用できる場合は、bashスクリプト内からRコードを実行し、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

これに注目する他のことは、R heredocからstdoutとstderrをログファイルに単純に入れることです。私はまだこれを試していませんが、おそらくうまくいくでしょう。

0
user5359531