Как фильтровать списки списков в R?

Согласно руководству, Фильтр работает с векторами, и он также работает со списками, например:

z <- list(a=1, b=2, c=3)
Filter(function(i){
  z[[i]] > 1
}, z)
$b
[1] 2

$c
[1] 3

Однако это не так. работать со списками списков, например:

z <- list(z1=list(a=1,b=2,c=3), z2=list(a=1,b=1,c=1), z3=list())
Filter(function(i){
  if(length(z[[i]])>0){
    if(z[[i]]$b > 1)
      TRUE
    else
      FALSE
  }
  else
    FALSE
}, z)
Error in z[[i]] : invalid subscript type 'list'

Как лучше всего фильтровать списки списков без использования вложенных циклов? Это также могут быть списки списков списков ...

(Вместо этого я пробовал использовать вложенные lapply, но не смог заставить его работать.)

Изменить: во втором примере, вот что Я хочу получить:

list(z1=list(a=1,b=2,c=3))

то есть без z $ z2, потому что z $ z2 $ b

7
задан tflutre 2 August 2011 в 01:01
поделиться