jra*_*ara 30 conditional r list
如何根据另一个列表中的条件(TRUE,FALSE)对列表进行子集化?请看下面的例子:
l <- list(a=c(1,2,3), b=c(4,5,6,5), c=c(3,4,5,6))
l
$a
[1] 1 2 3
$b
[1] 4 5 6 5
$c
[1] 3 4 5 6
cond <- lapply(l, function(x) length(x) > 3)
cond
$a
[1] FALSE
$b
[1] TRUE
$c
[1] TRUE
> l[cond]
Run Code Online (Sandbox Code Playgroud)
l [cond]出错:无效的下标类型'list'
Jas*_*gan 31
这就是Filter函数的用途:
Filter(function(x) length(x) > 3, l)
$b
[1] 4 5 6 5
$c
[1] 3 4 5 6
Run Code Online (Sandbox Code Playgroud)
Pat*_*ckR 24
另一种方法是使用sapply而不是lapply.
cond <- sapply(l, function(x) length(x) > 3)
l[cond]
Run Code Online (Sandbox Code Playgroud)
Jam*_*mes 17
[期待一个矢量,所以使用unlist上cond:
l[unlist(cond)]
$b
[1] 4 5 6 5
$c
[1] 3 4 5 6
Run Code Online (Sandbox Code Playgroud)