我需要一个没有污染工作空间的全球计数器。我能够使用另一个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
重置它?
答案 0 :(得分:1)
怎么样:
environment(nex)$i <- 0