2017-08-07 36 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

太好了!这似乎工作。这在哪里记录? '环境(nex)'返回一个散列,'str(environment(nex))'也是。似乎没有适用于'environment'的参数。谢谢。 –

+0

'environment(nex)'返回函数的'local'环境,'i'计数器所在的地方。尝试'ls(environment(nex))' –

+0

有意思,再次感谢,解决了这个问题。 –