LoginSignup
19
19

More than 5 years have passed since last update.

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

Posted at

(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"

ですね。

19
19
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
19
19