2016-03-28 4 views
0

Ich verwende den folgenden Code zum Ausführen von Simulationen. Wie kann ich a von x1 bekommen? Ich habe versucht lapply unten, scheint aber nicht zu funktionieren.Wie bekomme ich Datenrahmen in Listen?

library(parallel) 
clusterEvalQ(cl,library(evir)) 
set.seed(0) 
system.time(
x1 <- parLapply(cl, 1:100000, 
    function(i) { 
     n1 <- rpois(1,4) 
     n2<- rpois(1,7) 
     list(data.frame(a=rexp(n1, rate=0.1),a1=rexp(n1, rate=0.6)), 
      data.frame(b=rexp(n2, rate=0.7),b1=rexp(n2, rate=0.6))) 

    } 
) 
) 

y1<-lapply(x1, '[', , "a") 
+0

Können wir davon ausgehen, dass die Anzahl eines Datenrahmens (im Falle von "a" oder "a1" - 1) ist bekannt? Oder sollten wir diese Spalte über alle Datenrahmen hinweg suchen? – Julius

+0

@Julius wir können davon ausgehen, dass es bekannt ist – HaagenDaz

+0

'a' ist kein' data.frame' es ist ein 'vector' innerhalb eines dat.frame. Dasselbe gilt für "b" ... Sie verstehen die Datenstrukturen, mit denen Sie arbeiten, nicht. –

Antwort

1
y1 <- lapply(x1, function(x) x[[1]][["a"]]) 

gibt eine erforderliche Liste der Vektor, dass die Anzahl der Datenrahmen und gleich 1. Allgemeiner ist bekannt vorausgesetzt:

y1 <- Filter(Negate(is.null), sapply(unlist(x1, rec = FALSE), `[[`, "a")) 
+0

danke, ich habe den obigen Code leicht geändert. Wie kann ich nur 'a' oder' a1' bekommen? – HaagenDaz

Verwandte Themen