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
来重置它?
太好了!这似乎工作。这在哪里记录? '环境(nex)'返回一个散列,'str(environment(nex))'也是。似乎没有适用于'environment'的参数。谢谢。 –
'environment(nex)'返回函数的'local'环境,'i'计数器所在的地方。尝试'ls(environment(nex))' –
有意思,再次感谢,解决了这个问题。 –