LoginSignup
4
5

More than 5 years have passed since last update.

(Rの)環境問題について その5。

Posted at

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の中で環境だけは参照渡しです。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5