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
をリセットしてリセットするにはどうすればよいですか?
グレート!それはうまくいくようです。これはどこに文書化されていますか? 'environment(nex)'はハッシュを返し、 'str(environment(nex))'も返します。適用されると思われる '環境'に対する議論はありません。ありがとう。 –
'environment(nex)'は 'i'カウンタが存在する関数の' local'環境を返します。試してみてください'ls(environment(nex)) ' –
興味深いことに、もう一度、問題を解決しました。 –