12

各テーブル、統計テスト、およびグラフを説明するコメントがたくさんあるスクリプトを実行しようとしています。次のようにRStudio IDEを使用しています

source(filename, echo=T)

これにより、スクリプトがすべてをコンソールに出力することが保証されます。次のシーケンスを実行すると、すべての出力が txt ファイルに送信され、出力の迂回がオフになります

sink("filenameIwantforoutput.txt")
source(filename, echo=T)
sink()

残念ながら、多くのコメントが出力されていないことがわかりました。代わりに私は得る

「...しかし、私たちが排他的にbを持っていた場合に限り.... [TRUNCATED]」.

出力を保存する場所を以前に学びましたが、それは数か月前のことで、今では思い出せません。あなたはできる?

4

2 に答える 2

16

max.deparse.length=引数を に設定しますsource。おそらく、デフォルトの 150 よりも大きな値が必要になるでしょう。たとえば、次のようになります。

source(filename, echo=TRUE, max.deparse.length=1e3)

そして、?source読み取りの詳細セクションの最後の段落に注意してください。

'echo' が true で、逆パースされた式が 'max.deparse.length' を超える場合、その数の文字が出力され、その後に ' .... [TRUNCATED] ' が続きます。

于 2011-05-24T00:18:01.850 に答える
1

source()で関数をオーバーライドすることにより、この動作をデフォルトにすることができます.Rprofile

理論的には変更は画面出力にのみ影響するはずなので、これは関数をオーバーライドする妥当なケースのように思えます。これが当てはまらない例を考案することもできます。たとえば、画面出力をキャプチャして変数として使用することができますcapture.output(source("somefile.R"))が、そうは思えません。戻り値が変更されるような方法で関数を変更すると、あなたやあなたのコードを共有する人に噛み付く可能性があります (たとえば、関数のna.rm引数のデフォルトを変更した場合)。

.source_modified <- source
formals(.source_modified)$max.deparse.length <- Inf
# Use 'nms' because we don't want to do it for all because some were already
# unlocked. Thus if we lock them again, then we are changing the previous
# state.
# (https://stackoverflow.com/a/62563023/1376404)
rlang::env_binding_unlock(env = baseenv(), nms = "source")
assign(x = "source", value = .source_modified, envir = baseenv())
rlang::env_binding_lock(env = baseenv(), nms = "source")
rm(.source_modified)

別の方法は、独自の「エイリアス」のような関数を作成することです。.Rprofile で以下を使用します。

s <- source
formals(s)$max.deparse.length <- Inf
formals(s)$echo <- TRUE
于 2021-11-01T20:50:30.173 に答える