問題タブ [reproducible-research]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - パッケージ内の機密データを管理する最善の方法は何ですか?
R CMD check
私は医療データを扱っており、 、 、testthat
およびを利用して、パッケージ環境で分析を開発することを好みますdevtools
。
典型的な分析は、データベースからデータを抽出することから始まります (多くの場合、長い結合と多くの行が含まれるため、簡単な手順ではありません)。
私の主な目標は、再現可能な分析を可能にしながら、健康情報を保護することです。データを匿名化することはできますが、たとえ公式に匿名化されたとしても、個人を特定できる可能性のある情報がたくさんあることに懸念を抱いています。したがって、匿名化されたデータであっても非常に慎重に扱います。データは、分析ごとに約 100 ~ 500Mb です。
パッケージ内のディレクトリにデータをdata
配置することは、最悪の解決策のようです。データが大きいため、パッケージの作成が遅くなります。クエリが変化し、時間の経過とともに変化する場合、静的です。保護されたデータを送信したくない場合は、コードだけを共有することが難しくなります。
R.cache
、 、およびマークダウン ドキュメントでmemoise
キャッシュされたブロックを使用してみました。knitr
R.cache
現時点では最善のように思えますが、ホーム ディレクトリに大量のあいまいな名前のデータをダンプします。memoise
柔軟性が十分ではなく、データベースクエリよりも計算の一時的なキャッシュの方がはるかに優れているように見えました. knitr
キャッシングはマークダウンでは問題なく機能しましたが、インタラクティブな R の直接使用には使用できません。
適度に大量の保護されたデータを使用したパッケージベースの分析について、他に推奨事項や提案がある人はいますか?
emacs - ソースコードが主要な媒体である再現可能な研究への代替アプローチ
TL;DR:
再現可能な研究に対する一般的な動的ドキュメント (IPython ノートブック スタイル) アプローチは、通常、再利用可能なソース コード モジュールにはなりません。コードをより再利用可能にするために、ソース コードを主要な媒体として使用し、その中にテキストを含めるツール/アプローチはありますか?
一般的な動的ドキュメント アプローチの問題点
動的なドキュメントやノートブックを使用した再現可能な研究のコンセプトがとても気に入っています。特にデータの調査と分析では、分析プロセスが発生したときに文書化してコメントするのが便利です。私は通常、Emacs Org-mode および/または IPython ノートブック/カーネルを使用しており、非常によく統合されています。また、R とその類似物 (ESS、knitr) も調べました。
ただし、通常、これらのドキュメントは、順番に実行される一連のコード ブロックで構成されています。もつれていると (ソース コードの抽出)、結果のソース コードは通常、モジュールまたはライブラリとして簡単に再利用できません。
それでも、「ああ、数日前に行った分析の特定の部分を使用できたらいいのに」と思うことがよくあります。通常、暗黙的な依存関係のために、興味深い部分の前にほとんどのセルを実行する必要があることがわかります。通常、織り上げられた文書の特定の部分だけを含めることも容易ではありません。そして、それが (Org-mode の#+INCLUDE
ディレクティブまたは LaTeX catchfile betweentags を使用して) あったとしても、通常、異なる段落は自己完結型ではありません。もちろん、以前の分析ドキュメントをコピーして編集し、関連する部分をコピー/貼り付け/転送することもできます。しかし、それはちょっと目的を破ります。
要約する:
一般的な動的ノートブック アプローチは、「線形」スタイルのコード開発を促進します。つまり、コード チャンクを順番に実行し、テキスト パラグラフは通常線形の物語に従うため、通常は自己完結型ではありません。これは通常、ひどく再利用可能な複雑なコードと織り込まれた (テキスト ドキュメント入力) テキスト ドキュメントをもたらします。
可能な解決策を探しています
これまでに思いついたこれらの問題を解決するためのアイデアをいくつか紹介します。
主要な媒体としてのソース コード
しばらくして、上記の問題は散文/テキスト文書が主要な媒体であることに起因するという結論に達しました。時折図や表を含むこのようなテキスト文書は、その性質上、何らかの物語の直線的な記述です。そして、これが「直線的すぎる」スタイルを助長していると思います。
ソース コードが主要な媒体である場合、さまざまな宣言/定義を最初からモジュール化し、それらのドキュメント/説明を自己完結型にすることができます。マスター ドキュメントは、必要な説明に従って、関連する部分だけを選択できます。いくつかの点で、これは Python で docstring が使用され、Sphinx で抽出および処理される方法に非常に似ています。プロット、テーブル、および値の生成シーケンスは、テスト スイートまたはサンプル コードの一部にすることができます。
ただし、このアプローチは、一般的なアプローチと比較して対話性を制限します。インタラクティブな作業のほとんどは、単体テストまたはサンプルの作成およびデバッグ中に行われます。単体テストと例を書くことを奨励することは悪いことではありませんが、IPython などでの迅速なテスト/プロトタイピングよりも遅くなる可能性があります。その一方で、より一貫性があり、おそらくより管理しやすいでしょう。
nowebの力を利用した「ノンリニア」な文芸的プログラミングスタイル
文芸的プログラミングは密接に関連していますが、この「直線的すぎる」アプローチを推奨するものではありません。しかし、それはそれを奨励しません。
ただし、通常、完全に絡み合っている場合にのみうまく機能します。また、インタラクティブな使用には向いていません。さらに、散文ブロックはコード ブロックのように参照できないため、テキストの側面は依然として「線形」です。
私の質問
- ソース コードを主要な媒体として、そのようなアプローチを使用している人はいますか?
- このようなアプローチを使用して、以前のレポートを新しいレポートで再利用することに成功した人はいますか?
- それとも、「非線形」の noweb の力が進むべき道なのでしょうか?
git - リポジトリ内のファイルの git タイムスタンプを完全に変更することは可能ですか?
私は、git バージョンで管理されたテキスト ファイルのリポジトリが、理論的には、知的財産の目的で紙の実験ノートの代替品として機能できるかどうかを把握しようとしています。
紙のノートに毎日結果を書き留め、研究室の 1 人か 2 人がノートにサインオフし、空白を消します。理論的には、これは、その日に行ったことの完全な記録があり、その日付以降は何も追加できないことを示しているはずです。
これを git で実装できると私が考えている方法は、実験結果 (つまり、ラボ ノート) を含むリポジトリを作成し、それを github のプライベート共有リポジトリにプッシュすることです。(これを行う方法に関する提案はありますか?)
主な注意点は、全体的なコミット履歴に痕跡を残さずに、特定のテキスト ファイルの内容とタイムスタンプを完全に変更することは可能ですか (そうであれば、実行する必要があるコードは何ですか)。
r - 特定のRリリースで作成されたバージョンのパッケージのみをインストールするには?
R 3.2.2 に基づいて構築された Revolution R Enterprise ディストリビューションを使用しています。したがって、この R リリースに基づくパッケージ バージョンのみを採用することに関心があります。「checkpoint」や Revolution MRAN ページなどのパッケージをチェックしたところ、日付ごとに CRAN のスナップショットにアクセスする方法しか見つかりませんでした。特定の R リリースと互換性のある最新のパッケージ バージョンをインストールする方法はありますか?
python - Python での再現可能な研究のための Markdown
再現可能な研究を行うのに役立つ、Python の R-markdown に相当するものがあるかどうかを知りたいです。
注意してください: IPython Notebooks as an answer には興味がありません。
Python のコードで r-markdown の構文上の喜びを得たいです。r-markdown を提供して開始できることはわかっていengine="python"
ますが、 matplotlib を使用して生成されたプロットを再現可能なドキュメントに含めたい場合は、plt.show()
where plt
is alias toと書くだけで問題が発生しますmatplotlib.pyplot
。
これを達成するのに役立つPythonのモジュール/ツールについて知っていますか? そんなツールをSpyder/IntelliJで使いたい。
のようなオプションもそのようなecho=FALSE
ツールに存在することを望みます。
そのようなプロジェクトが存在しない場合、そのようなことに取り組んでいる誰か/組織について知っていますか.
r - 複製/出力機能による再現可能な例の作成の失敗
dput()
大規模なデータベースで再現可能な例を作成するために使用しようとしています。再現可能な例には移動平均が含まれるため、データベースは大規模である必要があります。これを行うために私が見つけた方法にはreproduce
、ここで共有されている関数が含まれますHow to make a great R reprobible example? @リカルド・サポルタ。reproduce
に基づいていますdput()
(コードはこちらhttps://github.com/rsaporta/pubR/blob/gitbranch/reproduce.R)。
そのコードはデータフレームを作成し、その出力をdata
提供します。引数をdput()
使用して、完全なデータフレームを出力します。rows
しかし、そのような出力を使用してデータフレームを再作成すると、失敗します。
dput()
出力を新しいデータフレームに割り当てようとすると、コードが不完全になり、最後に手動で 3 つの括弧を追加する必要があります。その後、次のエラー メッセージが表示されます。
引数なしでのdput()
出力は正常に機能することに注意してください。完全なデータフレームを出力するのではなく、サンプルを出力します。reproduce
rows = c(1:100)
この再現可能な例を作成するために、pastebin メソッドを使用したことにも注意してください。そのメソッドは、一部の列の単語間にスペースがあるデータをインポートしようとするたびに失敗するため、私の目的のためにメソッドを置き換えるものではありませんdput()
(日時スタンプのあるデータフレームなど)。
EDIT:さらにトラブルシューティングを行った後、引数が4つ以上の列を含むデータフレームと一緒に使用されているreproduce
場合、上記のように失敗することが発見されました。代替手段を見つける必要があります。rows
誰かがこれをテストすることに興味がある場合は、次のリンクを使用して上記のコードを実行してください。すべて異なる数の列が含まれています。
1) 100x5: http://pastebin.com/raw/xP1Zd0sC
2) 100x4: http://pastebin.com/raw/YZtetfne
3) 100x4: http://pastebin.com/raw/63Ap2bh5
4) 100x3: http://pastebin.com/raw/1vMMcMtx
5) 100x3: http://pastebin.com/raw/ziM1bYQt
6) 100x1: http://pastebin.com/raw/qxtQs5u4
r - R でのグラフのサンプリング
頂点用とエッジ用の 2 つのデータ フレームを作成して、R で有向グラフを作成したいと考えています。また、グラフには次の属性が必要です。
- 円なし (したがって、A -> A なし)
- 2 つのノード間に最大 1 つのエッジがあります。
私は以下のようなコードを思いつきます:
私のコードでは、2 つのノード間で 2 つのエッジが許可されています (A -> B AND B -> A)。A と B の間のエッジを 1 つだけにする方法を教えてください。
敬具
編集:私は解決策を見つけました: Rの2つの列を考慮した一意の行、順序なし
私の完全なコード:
r - set.seed() を使用している場合でも、mlr が異なる実行で異なる結果を返すのはなぜですか?
mlr
パッケージで得られた再現可能な結果を公開するには、set.seed()
関数を使用してコードのランダム性を制御する必要があります。
この質問のソースと次のコードで報告されているように、コードの実行が異なるとわずかに異なる出力が得られます。
ここにいくつかの再現可能なコードがあります
結果は次のとおりです。
実行ごとに異なる数値出力が得られることがわかります。これは、最も確率的なものから最も少ないものまで、すべての分類器に当てはまります。
再現性のある結果を得るにはどうすればよいですか?