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

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

More than 5 years have passed since last update.

(Rの)環境問題が界隈を賑やかしているっぽい。例えば、
http://obeautifulcode.com/R/How-R-Searches-And-Finds-Stuff/
に素晴らしい記事が出た。この記事を理解すればRの環境の8割はマスターしたと言えそうだ。

この記事の内容についてざっと触れた後に、関数呼び出しに伴う環境(+promise)、パッケージ云々での落穂ひろい的な情報を書いてみようと思う。

まず理解するように、ということで細かい所で不正確なところはたくさんあります。

1. 環境についてのざっくりとした説明

1-1. 名前

> mean(1:3)
[1] 6

meanが名前。関数名。

> pi
[1] 3.141593

piが名前。変数名。

変数とか関数の名前一覧を見るには。

> ls()
[1] "e" "l" "o" "P" "x"

と、ls()を使う。あれ、meanpiもない。じゃあどこにある?

1-2. 環境(っていうか、たらい回し)

こういう説明がいいのかどうかよくわかんなけいど・・・

誰かになんか欲しいって言われても持ってなかった時、せめて、じゃああの人に持ってるか聞いたらいいよ、って答えるのが親切で、Rの環境はこれと同じようなもの。

Rの中で私が何か(例えばmeanとかpi)とかを探すとき、まず身近な相手にそれを持ってるか聞く。その人がmeanとかpiとか持ってなかった時、じゃあ次はこの人に聞いてね、っていうのを教えてくれる。それをずーっとたどっていって最後まで誰も持ってなかったらエラー。

最初に聞く相手は.GlobalEnvというやつ。

> .GlobalEnv
<environment: R_GlobalEnv>

↑こいつね。

で、こいつが持ってるものを聞くには、やっぱりls()を使う。

> ls(pos = .GlobalEnv)
[1] "P" "d" "e" "i" "l" "o" "p" "x"

こいつがもってなかった時、次の人を紹介してくれる。次の人を知るにはparent.env()

> parent.env(.GlobalEnv)
<environment: package:stats>
attr(,"name")
[1] "package:stats"
attr(,"path")
[1] "/Library/Frameworks/R.framework/Versions/2.15/Resources/library/stats"

ごちゃごちゃ書いてあるけど、要するに、package:statsっていうのが次の人。あなたの場合は違うかもしれないけど。
で、package:statsさんmeanをもってるかというと・・・

> ls(pos = "package:stats")
  [1] "acf"                  "acf2AR"               "add.scope"            "add1"                
  [5] "addmargins"           "aggregate"            "aggregate.data.frame" "aggregate.default"   
...以下略

ないわ。なので、また次の人を紹介してもらいます。この紹介の順番はsearch()で簡単に知ることができて、

> search()
 [1] ".GlobalEnv"        "package:stats"     "package:graphics"  "package:grDevices" "package:utils"    
 [6] "package:datasets"  "package:devtools"  "MacJapanEnv"       "package:methods"   "Autoloads"        
[11] "package:base"     

という感じで、最後がpackage:baseです。Rはこの、順番に聞いてたらい回しで、っていう作業を勝手にやってくれている、ということです。

最後まで探してなければない、ということでエラーです。

> orz
Error: object 'orz' not found

orzという名前はどこにも見つかりませんでした。

ちなみにmeanpackage:baseにあります。誰が知ってるかを知りたければ、

> find("mean")
[1] "package:base"

ですね。

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
No 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
ユーザーは見つかりませんでした