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