2017-02-21 4 views
2

Ich habe eine Liste von Vektoren (mylist):Subset Liste von Vektoren mit dem Vektor von Positionen

a <- c(1,2,3,4) 
b <- c(5,6,7,8) 
c <- c(9,10,11,12) 
mylist <- list(a,b,c) 

I auch einen Vektor, der Positionen haben (mypos):

mypos <- c(1,2,3) 

Ich möchte Verwenden Sie mypos, um die Position der Elemente so festzulegen, dass jeder Vektor von mypos so untergeordnet wird, dass er zurückgibt:

Ich habe mit lapply wie folgt versucht:

lapply(mylist, "[", mypos) 

aber das gibt Elemente 1, 2 und 3 jedes Vektors:

[[1]] 
[1] 1 2 3 

[[2]] 
[1] 5 6 7 

[[3]] 
[1] 9 10 11 

ich auch versucht:

lapply(mylist, subset, mypos) 

Aber Dies gibt einen Fehler zurück, dass die Teilmenge logisch

Antwort

3

Wir könnenverwendendie entsprechenden Elemente von ‚mylist‘ aus dem Index der ‚myPos‘

Map(`[`, mylist, mypos) 

in der OP-Kodex zu extrahieren, die ‚myPos‘ ist in jeder der list Elemente wiederholt, was zu extrahieren alle Elemente aus Der Index. Stattdessen könnte es auf Sequenz geschleift werden

lapply(seq_along(mylist), function(x) mylist[[x]][mypos[[x]]]) 
+2

'mapply (\' [\ ', mylist, myPos)' vorausgesetzt, es geht ihnen gut mit den Ergebnissen kombiniert werden. – Frank

+0

Das ist der, danke. Ich werde definitiv auf 'Map()' für zukünftige Verwendung nachlesen. –

Verwandte Themen