すべてのコンソール出力をRのファイルに保存するにはどうすればよいですか?


82

すべてのコンソールテキストをファイルにリダイレクトたい。これが私が試したものです:

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

私は何が間違っているのですか?ありがとう!


このチュートリアルを
ご覧

回答:


105

「出力」と「メッセージ」を別々にシンクする必要があります(sink関数はの最初の要素のみを調べます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")

2
これは出力のみを印刷し、入力は印刷しません。たとえば1:5 + 1:3、入力行、その出力、次の行などを確認したい。このタイプのログを作成する理由は、実行に30ギガバイト以上のRAMを必要とするプログラムがあるためです。私はそれをAmazonクラウドで実行し、回帰からの出力を個々のファイルに保存します。ログを見て、各ファイルを生成したコードをすばやく見つけられるようにしたいと思います。注:コンソール出力をカットアンドペーストするだけの場合は、それで十分です。
user443854 2011

5
@ user443854もしそうなら、インタラクティブな作業をやめてスクリプトで作業することをお勧めします。
mbq 2011

5
@ user443854:ええ、コードをスクリプトに入れることはできますか?その場合、上記のように出力をリダイレクトすると、source( "script.R"、echo = TRUE)がトリックを実行します。
トミー

@トミーあなたは男。ありがとう!.Rスクリプトはありますが、リモートボックスのインタラクティブセッションに貼り付けていました。それを調達することはトリックを行います。
user443854 2011

2
@ user443854:ええ、max.deparse.length引数を使用してください。答えを更新しました。
トミー

10

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

==スクリプトの内容を開始します。R==

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

==スクリプトの内容を終了します。R==

コマンドプロンプト(多くのun * xバリアントでは「$」、Windowsでは「C:>」)で、

$ R CMD BATCH script.R &

末尾の「&」はオプションであり、バックグラウンドでコマンドを実行します。ログファイルのデフォルト名には、拡張子に「out」が追加されています。つまり、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

==スクリプトの内容を終了します。ルート==


1
私はzshを利用R CMD BATCH script.R &していますが、何らかの理由で機能しません。
ギルバート

3

できません。せいぜい、出力sinkと入力をsavehistory別々に保存できます。などの外部ツールを使用するscriptscreenまたはtmux


2

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


0

bashシェルを使用できる場合は、bashスクリプト内からRコードを実行し、stdoutストリームとstderrストリームをファイルにパイプすることを検討できます。ヒアドキュメントを使用した例を次に示します。

ファイル: 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ヒアドキュメントからログファイルに直接入力してみることです。私はまだこれを試していませんが、おそらくうまくいくでしょう。



0

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


1
詳しく説明してください
bunbun 2018

0

エラーメッセージを受け取りたい場合

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

screenRスクリプトの実行中に、ファイルに印刷すると同時に、たとえば進行状況を確認することができます。

  1. ターミナルで、スタート画面

    screen
    
  2. Rスクリプトを実行する

    R CMD BATCH yourscript.R
    
  3. を押して別の画面に移動しCtrlA、次にc

  4. (リアルタイム)で出力を見てください:

    tail -f yourscript.Rout
    
  5. CtrlAその後、画面を切り替えます n

または、画面を使用R CMD BATCH yourscript.R &しない場合は、手順2で使用してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.