-2

重複の可能性:
R で "<<-" (スコープ割り当て) をどのように使用しますか?

疑似コードを読んでいます。<<-私はこれに何度も遭遇しました。の意味は何<<-ですか? どういう意味ですか?<<-また、演算子を使用する際に考慮または注意する必要があることは何ですか?

4

1 に答える 1

10

ヘルプファイルから?"<<-"

演算子 <<- および ->> は、通常、関数でのみ使用され、割り当てられている変数の既存の定義を親環境で検索します。そのような変数が見つかった場合 (およびそのバインドがロックされていない場合)、その値が再定義されます。それ以外の場合は、グローバル環境で割り当てが行われます。それらのセマンティクスは S 言語のセマンティクスとは異なりますが、R のスコープ規則と組み合わせると便利です。詳細と例については、「The R Language Definition」マニュアルを参照してください。

次に例を示します。

foo <- function(){
  a <<- 1
}

aこれを実行して、グローバル環境で新しいオブジェクトがどのように作成されるかを確認します。

a
Error: object 'a' not found

foo()
a
[1] 1

これを避けるべき理由は、関数型プログラミングのパラダイムを壊してしまうからです。関数型プログラミングでは、入力のみに依存し、副作用を生じない関数を作成します。

の副作用は<<-、親環境で新しいオブジェクトを作成することであり、したがってもはや関数型プログラミングではありません。

ほとんどの日常的な使用では、 を使用する必要はありませんが<<-、状態を持つクロージャーを使用する場合、つまり、過去に何をしたかを記憶する場合に役立ちます。これについては、Hadley のdevtools wikiで詳細に説明されています。

于 2012-11-07T15:40:53.983 に答える