2016-04-01 3 views
0

Ich habe eine Liste von Listen, jede Unterliste hat Dutzende von Elementen und ich möchte nur eine davon extrahieren.

x = list(`1` = list(a=1,b=2),`2` = list(a=3,b=4)) 

Es gibt viele Möglichkeiten, dies zu tun, aber ich mag so klug wie möglich sein, so dass ich versuche

lapply(x,`$`,"b") 
# $`1` 
# NULL 
# 
# $`2` 
# NULL 

aber das funktioniert nicht, trotz der Tatsache, dass

`$`(x[[1]],"b") 
# [1] 2 

mapply funktioniert so:

mapply(`$`,x,MoreArgs=list(name="b")) 
# 1 2 
# 2 4 

kann ich lapply wie folgt verwenden:

lapply(x,getElement,"b") 
# $`1` 
# [1] 2 
# 
# $`2` 
# [1] 4 

Aber warum nicht lapply Arbeit mit $ so, wie es zu sollte?

+1

Dies kann hilfreich sein: http://stackoverflow.com/q/18216084/1191259 – Frank

+0

Dank @Frank - ich sah, dass, bevor ich geschrieben, aber das ist auch schon 'lapply'-ing an einer Teilmenge der Elternliste, in die ich die Kindlisten unterteilen möchte. – Mark

+0

Als der Typ, der es geschrieben hat, weiß ich nicht, was Sie unter Subsets meinen, aber das ist in Ordnung. – Frank

Antwort

2

können Sie versuchen,

lapply(x,'[[',"b")

$`1` 
[1] 2 

$`2` 
[1] 4 
+0

Das ist gut, aber ein Charakter mehr als ich will :) – Mark

+3

@Mark 'z <- \' [[\ '; lapply (x, z, "b") ' – Frank

+0

@Frank warum nicht' z = '$'; lapply (x, z, "b") "Arbeit? – Mark