[解決済み] "<<-" はどのように使うのですか?(Rのスコーピングアサイン)?
質問
について読み終えたところです。
Rのイントロダクションにあるスコーピング
について非常に興味を持っています。
<<-
を割り当てた。
マニュアルでは、1つの(非常に興味深い)例として
<<-
理解できた気がする。まだ足りないのは、これがどのような場合に役に立つのかという文脈です。
そこで、どのような場面で
<<-
は面白い/役に立つかもしれません。 それを使うことの危険性は何でしょうか(見失いやすいようです)、また、共有したいと思うようなヒントがあれば教えてください。
解決方法は?
<<-
は、状態を維持するためにクロージャと組み合わせて使うのが最も有効です。 以下は、最近の私の論文からの抜粋です。
クロージャとは、他の関数によって書かれた関数のことです。クロージャは
というのは
囲む
親環境の
関数内のすべての変数とパラメータにアクセスすることができます。
関数を使用します。これは、2つのレベルを持つことができるので、便利です。
パラメータがあります。パラメータの1つのレベル(親)は
関数が動作します。もう一方のレベル(子)は、仕事をします。以下は
次の例は、この考え方を使って、どのように
べき乗関数である。親関数(
power
) は子関数を作成します。
(
square
と
cube
) が、実際にハードワークを行う。
power <- function(exponent) {
function(x) x ^ exponent
}
square <- power(2)
square(2) # -> [1] 4
square(4) # -> [1] 16
cube <- power(3)
cube(2) # -> [1] 8
cube(4) # -> [1] 64
また、変数を2段階で管理できることで、関数が親の環境の変数を変更できるようになり、関数の呼び出しにまたがって状態を維持することが可能になります。異なるレベルの変数を管理するための鍵は、二重矢印の代入演算子
<<-
. 通常のシングルアローの代入とは異なり (
<-
) は、常に現在のレベルで動作しますが、二重矢印演算子は親レベルの変数を変更することができます。
このため、次の例のように、ある関数が何回呼ばれたかを記録するカウンターを保持することが可能である。毎回
new_counter
が実行されると、環境を作成し、カウンタを初期化します。
i
を作成し、新しい関数を作成します。
new_counter <- function() {
i <- 0
function() {
# do something useful, then ...
i <<- i + 1
i
}
}
新しい関数はクロージャであり、その環境は包含環境である。クロージャが
counter_one
と
counter_two
が実行されると、それぞれを包含する環境のカウンタを変更し、現在のカウントを返します。
counter_one <- new_counter()
counter_two <- new_counter()
counter_one() # -> [1] 1
counter_one() # -> [1] 2
counter_two() # -> [1] 1
関連
-
[解決済み] Rを再起動せずにパッケージをアンロードする方法
-
[解決済み] Rの再現性のある優れた例題の作り方
-
[解決済み] データフレームを結合(マージ)する方法(内側、外側、左側、右側)
-
[解決済み] データフレームの行を複数の列でソート(並び替え)する。
-
[解決済み] Rの代入演算子"="と"<-"の違いは何ですか?
-
[解決済み] 情報を損なわずに因数を整数値に変換するには?
-
[解決済み] パッケージ 'xxx' は利用できません (for R version x.y.z) 」という警告にどのように対処したらよいですか?
-
[解決済み] 関数のソースコードを見るにはどうしたらいいですか?
-
[解決済み] 統計的最頻値の求め方は?
-
[解決済み] Rで文字列から最後のn文字を抽出する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン