2016-12-23 3 views
2

Ich muss eine Schleife basierend auf bestimmten Vektorwerten ausführen. Einige Beispiel-Code und die Daten werden unten dargestellt:Führen Sie eine Schleife basierend auf Vektorelementen

list_store <- list() 
vec <- c(3,2,3) 
data_list <- lapply(list(head(mtcars,10), head(mtcars,15), head(mtcars,20), head(mtcars, 9), 
         head(mtcars,14), head(mtcars,18), head(mtcars,20), head(mtcars,10)), 
        function(x) rownames_to_column(x)) 
data_list1 <- lapply(list(head(mtcars,7), head(mtcars,8), head(mtcars,10)), function(x) rownames_to_column(x)) 
result <- lapply(data_list, function(i){ 
    list_store[[length(list_store) + 1]] <- merge(i, data_list1[[1]], all.y = TRUE) 
}) 

Der obige Code ist, dass ich zum ersten Mal drei Dateien von data_list mit ersten Datei data_list1, die nächsten beiden Dateien von data_list mit der zweiten Datei von data_list1 zusammenführen möchten und schließlich die andere drei Dateien von data_list mit der dritten Datei von data_list1. In meinem Code fusionieren wir alle Dateien von data_list mit der ersten Datei von data_list1, aber ich mag ändern data_list1 nach vec

ich eine Schleife der Verfolgung von i haben kann, j und so weiter alle den Prozess zu tun, aber ich möchte wissen, ob es einen effizienten Weg gibt.

Antwort

2

Wir replicate die ‚vec‘ durch die Folge von ‚vec‘, verwenden, die die split ‚DATA_LIST‘ in 3 list Elemente jeweils eine list aufweist. Dann verwenden Map die entsprechenden list Elemente aus dem split Datensatz und ‚data_list1‘, Schleife durch die verschachtelten list mit lapply und merge mit den Elementen der ‚data_list1‘ zu übergeben, verwenden c die geschachtelte list zurück in die normalen list Struktur zu konvertieren 'Datenliste'

do.call(c, 
    Map(function(x,y) lapply(x, function(dat) 
          merge(dat, y, all.y = TRUE)), 
     split(data_list, rep(seq_along(vec), vec)), 
      data_list1)) 
+0

Danke ... ein bisschen Erklärung wird hilfreich sein. –

+0

@AaghazHussain Danke, fügte die Erklärung hinzu – akrun

+1

Ich kann sagen 'R' legendären @akrun :) –

Verwandte Themen