2016-04-01 5 views
0

У меня есть список списков, каждый подсписщик имеет десятки элементов, и я просто хочу извлечь один из них.

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

Есть много способов сделать это, но я хочу быть таким же умным, как это возможно, поэтому я стараюсь

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

, но это не работает, несмотря на то, что

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

mapply действительно работает следующим образом:

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

я могу использовать lapply так:

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

Но почему не lapply работы с $ так, как она должна?

+1

Это может быть полезно: http://stackoverflow.com/q/18216084/1191259 – Frank

+0

Благодаря @Frank - я видел, что раньше я отвечал, но это о 'lapply'-ing на подмножестве родительского списка, где я хочу подмножить дочерние списки. – Mark

+0

Как парень, который написал это, я не знаю, что вы имеете в виду подмножествами, но все в порядке. – Frank

ответ

2

Вы можете попробовать

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

$`1` 
[1] 2 

$`2` 
[1] 4 
+0

Это хорошо, но один символ больше, чем я хочу :) – Mark

+3

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

+0

@Frank почему не' z = '$'; lapply (x, z, "b") 'работает? – Mark

Смежные вопросы