2016-03-22 4 views
1

Ich bin völlig überfordert. Ich versuche, eine große XML-Datei mithilfe von Schließfunktionen zu lesen. Das einzige Problem ist, ich bin nicht in der Lage, eine Möglichkeit zu finden, einen Zähler innerhalb der Schließung zu erstellen, so dass ich den Zähler als ID für den Speicherort verwenden kann. Ich habe mir den folgenden Code ausgedacht, der offensichtlich einige (oder vielleicht ernsthafte) Probleme hat.R Erstellen Sie einen Schließzähler

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() 

Hier ist das Beispiel data.

Antwort

1

Das ist ziemlich viel es, Sie wollen einfach nur die Funktion aufrufen, um es gehen,

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

Dadurch mir den Fehler geben 'Fehler im Speicher [[i]] <- Wert: Objekt ' i‘nicht Called aus gefunden: (function (x, ...) { new_counter <- (function() { i <- 0 function() { i << - i + 1 i } })() ns <- getNodeSet (x, path = "// Ereignis [@ type = 'link link' oder @ type = 'eingegebener Link']") Wert <- lapply (ns, xmlAttrs) Speichern [[i]] <- Wert }) () ' – Gandalf

+0

Zusammen mit Ihrer obigen Lösung, macht dies einen Sinn? 'store [[new_counter()]] <- value' – Gandalf

+0

Jetzt gibt mir das einen neuen Fehler:' Fehler im Speicher [[new_counter()]] <- Wert: falsche Argumente für Umgebungssubassignment' – Gandalf