http://qiita.com/items/325bdf48f4f4885a86f1 と
http://qiita.com/items/35184390984975ec7c6d と
http://qiita.com/items/7fdb523a05a2e0b12f35 と
http://qiita.com/items/1cb4a7a05b026a0cf2bb の続き。
promiseにいこうと思ったんですが、その前に環境の参照渡しについて説明する必要があることに気づいてしまったので説明します。ちなみにおばちゃんの例えはもうやめますが、環境が出てきたらおばちゃんだと思ってください。
環境は参照渡し
Rのほぼすべてのオブジェクトは値渡しです。ただし環境だけは違って、参照渡しです。
値渡しと参照渡しの違いは以下の通りです。
普通の変数だと
> a <- 1 # 普通のオブジェクト
> f <- function(x) x <- 2
> f(a) # aを渡す
> a
[1] 1 # aに変化なし。
これが環境だと
> e <- new.env() # 適当に環境作成
> assign("a", 1, e) # 環境eにaを代入
> get("a", e) # 環境から変数を得る。
[1] 1
> f <- function(x) assign("a", 2, x)
> f(e) # 参照渡しきます
> get("a", e)
[1] 2 # 変化してる
ちなみに、これは環境がリストだからではなく、環境だからです。
> l <- list(a = 1) # 適当にリスト作成
> l
$a
[1] 1
> f <- function(x) x$a <- 2
> f(l) # 値渡しきます
> l
$a
[1] 1 # 変化なし
というわけで、Rの中で環境だけは参照渡しです。