Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away