减少lapply返回的元素数量

时间:2017-11-30 12:47:29

标签: r list lapply

l <- lapply(1:10,function(u)ifelse(u<5,return(u),return(NULL))) 所述:

  

lapply返回与X相同长度的列表,每个元素都包含在内   是将FUN应用于X的相应元素的结果。

是否仍然可以返回长度小于X的列表?

代码

l[!sapply(l,is.null)]

我可以在返回(NULL)部分放置一些东西,以便完全删除/省略元素吗?

期望输出

代码部分的输出应与:

相同
{{1}}

4个列表,只包含小于5的元素!

1 个答案:

答案 0 :(得分:2)

  

是否仍然可以返回长度小于X的列表?

根据OP引用的文档,答案是&#34;不,除非你将lapply包装在另一个在其之前或之后过滤掉不需要的元素的调用中。&#34;

有许多可能的解决方法,但我可能会......

# example function
f = function(z) c(a = list(z+1), b = list(z-1), c = if (z > 3) list(z^2))

library(data.table)
data.table(x = 1:10)[x < 5, rbindlist(lapply(x, f), fill=TRUE)]

   a b  c
1: 2 0 NA
2: 3 1 NA
3: 4 2 NA
4: 5 3 16

...假设函数返回一个命名列表。如果它只返回标量,请尝试向量化或使用sapplyvapply代替lapply