function を書かずに済む Filter

Filter 関数で function を書かずに済むようにしてみた。
デフォルトの引数を「.」にして、Bool値のベクトル返すような式を第一引数に入れる。

fi <- function(f, .)
{
	ind <- as.logical(eval(substitute(f)))
	.[!is.na(ind) & ind]
}

> fi(3 < . & . < 7, 1:10)
[1] 4 5 6

けど、これを http://d.hatena.ne.jp/arbores/20080521/1211463230 のS3に組み込もうとすると、

`[.call` <- function(x,f)Filter(eval(substitute(function(.)X, list(X=f))), x)

> q <- quote
> (1:10)[q(. > 3)]
[1]  4  5  6  7  8  9 10

みたいに無駄な q が入るなぁ。けどこれなしではうまく動かないしな。