R创建一个闭包计数器

时间:2016-03-22 04:32:36

标签: r xml-parsing closures sax

我完全不了解这一点。我试图使用闭包函数读取一个大的xml文件。唯一的问题是,我无法找到在闭包内创建计数器的方法,以便我可以使用计数器作为商店位置的id。我提出了以下代码,这些代码显然存在一些(或可能是严重的)问题。

branchFunction <- function() {
  store <- new.env() 
  func <- function(x, ...) {
    new_counter <- function() {
      i <- 0
      function() {
        i <<- i + 1
        i
      }
    }
    ns <- getNodeSet(x,path = "//event[@type='left link' or @type='entered link']")
    value <- lapply(ns, xmlAttrs)
    store[[i]] <- value
  }
  getStore <- function() { as.list( store ) }
  list(event = func, getStore=getStore)
}

myfunctions <- branchFunction()

xmlEventParse(file = "xml.xml", handlers = NULL, branches = myfunctions)

#to see what is inside
l <- myfunctions$getStore()

以下是示例data

1 个答案:

答案 0 :(得分:1)

这就是它,你只想调用函数来实现它,

new_counter <- (function() {
  i <- 0
  function() { 
    i <<- i + 1
    i
  }
})()