多くの R パッケージでは、式を引数として取る関数を使用できます。ただし、さらに一歩進んだものもあります。たとえば、plyr
@hadley によるパッケージでは、次の名前の関数を大胆に定義しています.
。
> .
function (..., .env = parent.frame())
{
structure(as.list(match.call()[-1]), env = .env, class = "quoted")
}
<environment: namespace:plyr>
私の環境で?'.'
は、「どのパッケージにもトピックのヘルプが見つかりません」というメッセージが表示されます。.()
表面的には、周囲の環境を自動的にキャプチャする遅延評価のメカニズムを提供しているように見えます。
> x <- c(1,2,3)
> dot <- .(x + 10)
> dot
List of 1
$ x + 10: language x + 10
- attr(*, "env")=<environment: R_GlobalEnv>
- attr(*, "class")= chr "quoted"
> dot[[1]]
x + 10
> eval(dot[[1]])
[1] 11 12 13
それだけですか?属性の目的は理解できenv
ますが、なぜclass = "quoted"
重要なのですか?
R が式を定義しなければならないさまざまなメカニズムと、評価の遅延と強制のすべてについて、.()
式を渡すときにパターンを使用する利点とコストにはどのようなものがありますか?