如何将列表子集化并删除空向量?

时间:2013-11-27 10:35:32

标签: r

require(plyr)

list <- list(a=c(1:3),
             b=c(1:5),
             c=c(1:8),
             d=c(1:10))

llply(list,function(x)(subset(x,subset=(x>5))))

以上回报:

$a
integer(0)

$b
integer(0)

$c
[1] 6 7 8

$d
[1]  6  7  8  9 10

如何仅使用现有值返回列表,此处为$ c和$ d?

3 个答案:

答案 0 :(得分:1)

您不需要 plyr

out <- lapply(list, function(x) x[ x > 5 ] )
out[ sapply(out, length) > 0 ]

结果:

$c
[1] 6 7 8

$d
[1]  6  7  8  9 10

答案 1 :(得分:0)

你真的不应该调用列表变量“list”,因为它是一个函数名。如果它被称为L那么:

L[lapply(L,length)>0]

这应该给出一个非空列表

答案 2 :(得分:0)

您可以使用“ lengths()”:

# Your original list
your_list1 <- list(a=c(1:3),
                   b=c(1:5),
                   c=c(1:8),
                   d=c(1:10))

# Your subseted list
your_list2 <- lapply(your_list1,function(x) x[ x > 5 ])

# Your 'non_empty_elements' list    
your_final_list <- your_list2[(lengths(your_list2) > 0)]


> your_final_list
$c
[1] 6 7 8

$d
[1]  6  7  8  9 10

Pdt:分配给您创建的objets的名称必须对您有意义,但我同意Stephen Henderson的观点,对对象使用函数名称不是一种好习惯。除了教学上的原因,我认为也没有必要使用我这么长的名字。