ユーザーが送信したデータが検証され、いくつかの予備的な統計テストが実行され、結果のワークスペースがさらなる分析のために統計学者に送信されるワークフローを開発しています。
一部のシナリオでは、RData ファイルは、それまでプロジェクトに精通していなかった統計学者に送信されます。RData ファイルを開いて、プロジェクトを要約したメッセージ、開いたワークスペースに何が含まれているかを示すメッセージ、および詳細情報を検索できる URL を表示できるようにしたいと考えています。
問題は、コマンドを実行したりパッケージをロードしたりする統計学者にできるだけ頼らないようにしていることです。私が思いついた最高のものはこれです(RDataファイルの作成中):
library(stringr);
## the message, wrap it to 40 char because we're being cautious
message <- strwrap("Blah blah this is a message, look at this url http://foo.bar, here is a file listing. To see this information again, please type 'README()'",40);
## override ls
ls<-README<-function(...) {
## prints neatly wrapped message with no line numbers
cat(paste0(message,collapse='\n'),'\n\n');
## capture the execution environment
pf<-parent.frame();
## print the requested ls output
print(base:::ls(...));
## if README was invoked as ls, clean it up
if("ls" %in% base:::ls(pf)) pf$ls<-NULL;}
## generate the RData file, where FOO, BAR, BAZ are, e.g.
## fitted models or data frames
save(ls,README,message,FOO,BAR,BAZ,file='your_output.RData');
次に、your_output.RData は、統計学者が R セッションから開くファイルです。
これは、統計学者がある種のインターフェイス (ESS など) に "ls" を入力させるのではなく、コンソールで "ls" と入力することを前提としているため、最適ではありません (エラーが発生する可能性もあります)。また、使い勝手の良さからしても基本的な機能をいじるのは大雑把に感じます。
私が考えたもう 1 つのことは、README をカスタム クラスにして、それと共に S3 印刷メソッドを RData ファイルに保存することですが、すべての人が完全なオブジェクトをすぐにコンソールに出力するわけではありません。私はおそらくそれを試しclass()
てみるだろうしhead()
、他の人が最初に何をするかは誰にもわからない.
コマンドのドキュメントには次のように書かれてい.First()
ます(強調は私のものです)...
関数 '.First' (および '.Last') は、適切な '.Rprofile' または 'Rprofile.site' ファイルで定義するか、'.RData' に保存することができます。
...しかし、既に実行中のセッションから RData ファイルを開くと、.First()
実行されません。
誰かが最小限のユーザー入力で、できれば何も入力せずに RData ファイルを開いたときに、1 回限りのメッセージを表示する方法を知っている人はいますか?