如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的元素!
答案 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
...假设函数返回一个命名列表。如果它只返回标量,请尝试向量化或使用sapply
或vapply
代替lapply
。