Feeds:
Posts
Comments

台風が来そうで来ない@関東。

Rでの解析の一例として、台風の軌道とか強さとかを処理してみよう。
台風のデータは実験心理学のデータに近いので、その手の解析には応用できると思います。

Continue Reading »


S4/R5クラスのデバッグ

Rにビルトインされたオブジェクト指向的なフレームワークを提供する仕組みとして、S3以外に、S4とR5がある。大規模なパッケージを作るときとか、mutableな機能を実装するときにはとても役立つ。
あとR5はR5 reference classというように、参照渡しのセマンティックで実装されてるので、関数型言語らしさはなくなっちゃうんだけど、馬鹿でかいデータとかある時にはコピーが発生しないので、効率がよくなるはず。

ここらへんを使ってる人は、特に説明もいらないと思うので、デバッグのやり方は以下の実例で。ポイントだけ箇条書きします。

  • S4の場合、tracesignatureを渡す。
  • S4の場合、特定のインスタンスのメソッドだけデバッグする、というのは難しい(相当回りくどいことしないと無理だと思う)。
  • R5の場合、生成されたインスタンスのメソッドに対して普通の関数のようにdebugなり、traceなりで、デバッグできる。
  • R5の場合、S4とは逆に、あるクラスのメソッドを、どのインスタンスで呼ばれた場合にでもデバッグする、というのは難しい(試したら出来たけどbad hackっぽい)。

なお、既存のパッケージとかじゃなくて、開発中で自分でソースコードをいじれるなら、直接broweserを仕込むのが一番早いとおもう。

Continue Reading »


S3メソッドのデバッグ

S3ジェネリック

S3ジェネリックは、オブジェクト指向っぽい簡単なメソッドディスパッチの機能を提供する。詳細は、?S3Methodsとか、?methodsとかで。

普段使ってる関数の多くが、S3メソッドとして実装されてる。例えば、plot:

実行例

> methods(plot) # methodsで、その名前のS3メソッドの一覧を表示
 [1] plot.acf*           plot.data.frame*    plot.decomposed.ts* plot.default        plot.dendrogram*    plot.density       
 [7] plot.ecdf           plot.factor*        plot.formula*       plot.hclust*        plot.histogram*     plot.HoltWinters*  
[13] plot.isoreg*        plot.lm             plot.medpolish*     plot.mlm            plot.ppr*           plot.prcomp*       
[19] plot.princomp*      plot.profile.nls*   plot.spec           plot.spec.coherency plot.spec.phase     plot.stepfun       
[25] plot.stl*           plot.table*         plot.ts             plot.tskernel*      plot.TukeyHSD      

   Non-visible functions are asterisked

Continue Reading »


エラーが出ちゃったあとにデバッグする

今までのやり方は、前もってデバッグを仕込んでおいて、動作を確認する、という感じなので、デバッグすべき場所が分かっていることが前提だった。だけど多くの場合、「エラーどこで起こってんのー」と、死んだあと(post-morten)にデバッグしたいことが多々ある。

デフォルトではRはエラーがどこで起こったか非常に分かりづらいんだけど、post-morten debuggingが簡単にできる方法が幾つかある。

  • tracebackでエラーまでのコールスタックをたどる。
  • option(error)をいじってエラーをデバッグのトリガーにする。
  • 上と似てるけど、dump.framedebuggerを組み合わせて、天国からデバッグする。
  • おまけ

Continue Reading »


traceでフレキシブルなデバッグ

traceで、かなりフレキシブルなデバッグを仕込める。実際、setBreakpointtraceのラッパ。

trace(fun, hoge)funに対してhogeを埋め込める。traceを解除するにはuntrace(fun)で。

以下、traceの使い方を簡単に解説。

Continue Reading »


デバッグモードに入る方法

いくつかある。基本的には、

  • debug: 既存の関数でお手軽にデバッグしたい。
  • browser: 自分で関数書いてます、デバッグしたい。
  • setBreakpoint: スクリプトファイルの行番号からデバッグしたい。
  • trace: いろいろやりたい。別記事で解説。

という感じだと思う。他にもあるかもしれない。

Continue Reading »


インタラクティブ・デバッグの基本

デバッグは基本的にdebugとかbrowserとかでインタラクティブ・デバッグモードに入って行うことが多い。使えるコマンドは以下の通り。

  • n (または空行でリターン): 現在の式を実行。
  • c (または cont): デバッグモードを終了して、以降の式を実行。
  • Q: デバッグモードを終了。以降の式は実行されない。
  • where: コールスタック(関数呼び出しのスタック)を表示。

その他の入力は、Rのコンソール上での入力と同じように評価される。ls()で変数リストを表示するとかは便利。変数名を入れればその変数がprintされる。

Continue Reading »

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: