R

R で無限長ベクトル

R

http://www.ibm.com/developerworks/jp/linux/library/l-r3/index.html の無限シーケンスをまねてやってみる。 # 初期値と数列を生成する関数を渡して、無限数列生成の関数を作る make_infinity <- function(init, func){ inf_vec <- init function(idx, len…

R をオブジェクト指向風に使ってみる

R

Rでは S4 メソッドでオブジェクト指向は行えるけど、手軽には使いにくい。 そこで、クロージャーと eval を使ってオブジェクト指向風なことをやってみる。 …というのは建前で、s「substitute と eval 使えばクロージャー内の関数呼べそう」と思ったから試し…

ライフゲーム続き

R

改善点 速度向上 インデックスのテーブル と 行列はベクトルであること を利用して outer を消した。そのおかげで apply の回数が 縦セル×横セル から 縦セル になった.。 状態の継続 前回は f() を実行するたびに初期状態から始まっていたが、2回目以降の f…

ライフゲーム

R

最近 R を触ってなかったので、リハビリがてらにhttp://ja.wikipedia.org/wiki/ライフゲーム:セルオートマトンを書いてみる。 ライフゲームを選んだのは、「部分行列アクセスを使えば簡単かも」と思ったから。 life_game <- function(x=40, y=40) { m <- mat…

function の置き換え

R

毎回 function と書くのは面倒くさいので、楽に書けるように置き換えてみた。 f <- function(...,b){ ab <- substitute(c(...)) if (length(ab) < 3 && !hasArg(b)) stop("2引数以上または'b'引数を指定して下さい") if (hasArg(b)) { a <- ab b <- substitu…

ちょっと気になったこと

R

関数の仮引数に対して、呼び出し時の引数が少なくても問題ない。 > (function(x,y){})(10) NULL でも、関数内で使われるとダメ。 > (function(x,y){y})(10) 以下にエラー (function(x, y) { : 引数 "y" がありませんし、省略時既定値もありません 関数実行時…

R の継続

R

R に callCC という関数があって、 callCC package:base R Documentation Call With Current Continuation Description: A downward-only version of Scheme's call with current continuation.と書かれていたので、試してみた。http://www.stdio.h.kyoto-u.…

n-gram が簡単にできそう

R

http://www.okada.jp.org/RWiki/?R%A4%CE%B4%F0%CB%DC%A5%D1%A5%C3%A5%B1%A1%BC%A5%B8%C3%E6%A4%CE%BB%FE%B7%CF%CE%F3%A5%AA%A5%D6%A5%B8%A5%A7%A5%AF%A5%C8%B0%EC%CD%F7 を見てると、embed というのがあった。 > example(embed) embed> x <- 1:10 embed> em…

時系列データの線形フィルタ

R

Filter が vector から要素を取り出す関数なら filter は何だろう?と思ったので調べてみた。 > ?filter Linear Filtering on a Time Series Description: Applies linear filtering to a univariate time series or to each series separately of a multiva…

function を書かずに済む Filter

R

Filter 関数で function を書かずに済むようにしてみた。 デフォルトの引数を「.」にして、Bool値のベクトル返すような式を第一引数に入れる。 fi <- function(f, .) { ind <- as.logical(eval(substitute(f))) .[!is.na(ind) & ind] } > fi(3 < . & . < 7, …

順列を作ってみる

R

R には combn という組み合わせを作ってくれる関数がある。 > combn(1:3,2) [,1] [,2] [,3] [1,] 1 1 2 [2,] 2 3 3 > combn(letters[1:3],2) [,1] [,2] [,3] [1,] "a" "a" "b" [2,] "b" "c" "c" けど順列を作ってくれる関数はなかったので、つくってみた。 p…

S3 メソッドを使ってみる

R

http://d.hatena.ne.jp/syou6162/20080521/1211321228 をみて、Filter も で使えた方が一貫性があるし、Filter って書くよりも短いよね、と思ったので書いてみた。 演算子の動作を定義するには [ 関数を書き換えればいい。 [ 関数は呼び出す時には "["(1:10,…