2016-06-03 5 views
3

Ich führe eine Anwendungsfamilie-Funktion über einen großen Datensatz und so frage ich mich, ob es eine Möglichkeit gibt zu wissen, wie geht der Job so weit, Wie viele Elemente wurden bisher gesehen oder so?Gibt es eine Möglichkeit zum Drucken der Anzahl der Iterationen beim Ausführen einer Anwendungsfunktion in R

+3

prüft das Paket aus [pbapply] (https://cran.r-project.org/web/packages/pbapply/pbapply.pdf) (Fortschritt-Bar-Anwendung) – lukeA

+3

'gelten (... , Funktion (x) {print (was auch immer); do_whatever()}) ' – eddi

+0

@lukeA eh, nicht sehr beeindruckt mit pbapply, fügt es eine Menge Overhead, vergleichen Sie die folgenden:' tbp <- txtProgressBar (12000000) ' , 'x <- lapply (1: 2000000, Funktion (y) {setTextProgressBar (tpb, getTxtProgressBar (tpb) + 1); y + 1})' vs 'x <- pblapply (1: 2000000, Funktion (y) y + 1) 'letzteres dauert Minuten, der erstere dauert vielleicht 10 Sekunden – Shape

Antwort

2

Sie betrachten können einen globalen Zähler erstellen und angeben, wenn Sie Möchten Sie den Fortschritt drucken, können Sie z. B. einen Hinweis ausdrucken, wenn 10% Ihrer Daten verarbeitet wurden;

counter <- 0 
data <- rnorm(100) 
results <- sapply(data, function(x) { 
        counter <<- counter + 1; 
        if(counter %in% seq(0, length(y), 10)) 
         print(paste(counter, "% has been processed"))}) 

[1] "10 % has been processed" 
[1] "20 % has been processed" 
[1] "30 % has been processed" 
[1] "40 % has been processed" 
[1] "50 % has been processed" 
[1] "60 % has been processed" 
[1] "70 % has been processed" 
[1] "80 % has been processed" 
[1] "90 % has been processed" 
[1] "100 % has been processed" 
+3

Warum nicht nur 'drucken (i) '? –

+0

Die Daten, die an die Funktion übergeben werden, können spezifischer sein, als er sehen möchte. Er möchte nur den Fortschritt wissen, also sollte es besser sein, einen separaten "Zähler" zu haben. Ich gebe hier nur ein Beispiel, in Wirklichkeit sollten seine Daten komplizierter sein als "1: 5" und müssen nicht unbedingt den Fortschritt widerspiegeln. – Psidom

1

Sie könnten eine print-Anweisung an die Funktion hinzufügen Sie diese verwenden wie

apply(mtcars,2, function(i) {print(i[1]) 
mean(i)}) 

Ist das nicht schön, aber das tut, was Sie wollen

Verwandte Themen