2016-07-06 7 views
0

Rはレキシカルスコープを使用し、コンピュータ上のR Studioでテストしたところ、字句ではなくダイナミックスコープに合った結果が得られました。それはRで起こるはずではないですか?私が走った:Rが動的スコープで動作するのはなぜですか?それは字句ではありませんか?

y <- 10 
f <- function(x) { 
    y <- 2 
    y^3 
} 
f(3) 

とFを(3)私のクラスは、このスライド発表にもかかわらず、4(2^3)ではない100(^ 3 10)であることを出てきた:http://puu.sh/pStxA/0545079dbe.pngを。ダイナミックなスコープではないですか?私はちょうどこの間違って見ているかもしれませんが、スコープをレキシカルに切り替えることができるメニュー、または何が起きているのかメニューにはモードがありますか?

+4

y <- 10 f <- function(x) { y^3 } f(3) 

は出力を生成します。 (あなたのコード例ではcubedを使用し、段落ではsqauredを使用しています。)また、RStudioをコードエディタとして使用しているかもしれませんが、RStudioではなくRに関するものです。 MS Wordをエディタとして使用していたという理由だけで、英語の文章題に「Word」というタグを付けることはありません。 – Gregor

+0

2^3は4である。 10^3は100ですか?幸運にも私の正気のためにRもそうは思わない。 –

答えて

0

あなたのコードでは、関数自体の中でyが割り当てられています。これはグローバル環境のyより前に検索されます。

この優秀な記事(http://www.r-bloggers.com/environments-in-r/):「関数が評価されるとき、Rはスコープ内の変数について一連の環境を調べます。評価環境が最初にあり、次に関数が環境を囲む環境ワークスペースで定義された関数のために。

変数「y」を呼び出すと、関数の環境でRが「y」を検索し、見つからない場合はワークスペースに移動します。例は説明する:あなたはあなたの質問のフォーマットにし、それが内部的に一貫することで動作するはずです

> f(3) 
[1] 1000 
+0

また、関数内でのyの定義は、 '< - 'の代わりに '<< - '代入演算子を使用しない限り、グローバルスコープには達しません。 – Adam

+0

よろしいですか。だから私も考えましたが、私のレッスンにはこのスライドがあります:http://puu.sh/pStxA/0545079dbe.pngこれはちょうど間違っていますか? – Bethie

+0

このソース(https://github.com/jtleek/modules/blob/master/02_RProgramming/Scoping/index.md)を引用:Rにおける 「字句スコープはFREE(強調鉱山)変数の 値を意味しますその関数が定義されている環境で検索されます。 関数の環境内でy < - 2を割り当てたため、yは空き変数ではありませんでした。 – Anton

関連する問題