2017-09-11 3 views
0

Ich habe ein langes R-Modell, das zahlreiche Zusammenführungs- und Verknüpfungsoperationen zwischen verschiedenen Datensätzen enthält. Um der Lage sein, um sicherzustellen, dass dies nicht auf Fehler führt (zB aufgeblasen Datensätze aufgrund von nicht eindeutigen Kennungen), ich halten einen Merge-Tracker, die ich wie folgt codiert:Erstellen einer Protokolldatei zum Verfolgen von Datenzusammenführungen

merge <- "dat1+dat2=dat1" 
count <- nrow(dat1) 
check_t1 <- data.frame(merge, count) 
dat1 <- join(dat1, dat2, by = "id1", type = "left") 
count <- nrow(dat1) 
check_t2 <- data.frame(merge, count) 
checkmerge <- rbind(checkmerge, check_t1, check_t2) 

Dies hat zunehmend erhöhte die Lesbarkeit und Geschwindigkeit des Skripts. Es stellt sich also die Frage: Gibt es bessere Möglichkeiten, Soch-Log-Dateien zu erstellen (z. B. über eine Funktion) oder wie gehen Sie generell damit um?

+2

im Entstehen begriffenen Rohr-Syntax & dplyr (et al) ops R Arena, gibt es [Lumberjack] (http : //www.markvanderloo.eu/yaRb/2017/06/23/track-changes-in-data-with-the-lumberjack/) – hrbrmstr

Antwort

1

Sie können eine Funktion wie diese verwenden, die einen stopifnot Zustand enthält. Es wird einen Fehler aus, wenn Ihr beitreten aufbläst Ihre data.frame

myfun <- function(df1, df2, id, jtype, msg) { 
       require(plyr) 
       print(msg) 
       M <- join(df1, df2, by = id, type = jtype) 
       stopifnot(nrow(df1)==nrow(M)) 
       return(M) 
     } 

library(plyr) 
myfun(mtcars, mtcars, "cyl", "left", "mtcars, mtcars") 

Ausgabe

[1] "mtcars, mtcars" 
Error: nrow(df1) == nrow(M) is not TRUE 
Verwandte Themen