2017-08-07 24 views
0

私はワークスペースを汚染しなかったグローバルカウンタが必要でした。私は別のSO postを使って次のように作成することができました。非汚染グローバルカウンタをリセットするにはどうすればいいですか?

nex <- local(({ # increment a counter and return the ith entry 
    i <- 0L 
    function(v) { 
    if (i == length(v)) i <<- 0L 
    i <<- i + 1L 
    return(v[i]) 
    } 
})) 

nexは次のような関数で使用でき、正常に動作します。 iは作業領域にありません。

magic <- function(num_vec) { 
    tmp <- nex(num_vec) 
    print(tmp) # output is correct 
} 

を実行し、それ:質問には今

jnk <- magic(1:5) # works as expected, i is not in workspace 

iはそれ自身の特別な環境にあります。私が取り組んでいるより大きな文脈では、ある点でiを1にリセットする必要があります。私はそれがどこに隠されているか分からないので、私はそれをリセットする方法がわかりません。 iをリセットしてリセットするにはどうすればよいですか?

答えて

1

方法について:

environment(nex)$i <- 0 
+0

グレート!それはうまくいくようです。これはどこに文書化されていますか? 'environment(nex)'はハッシュを返し、 'str(environment(nex))'も返します。適用されると思われる '環境'に対する議論はありません。ありがとう。 –

+0

'environment(nex)'は 'i'カウンタが存在する関数の' local'環境を返します。試してみてください'ls(environment(nex)) ' –

+0

興味深いことに、もう一度、問題を解決しました。 –

関連する問題