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?
答案 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的观点,对对象使用函数名称不是一种好习惯。除了教学上的原因,我认为也没有必要使用我这么长的名字。