通过评估元素来减少列表列表

for*_*rin 0 r

如何将列表列表减少为仅包含符合特定条件的值?我已经看到了类似的问题,又看了看Filter,Reduce等,但似乎无法做什么工作.

> h = list(A=c(1, 2, 3), B=c(2, 3, 4), C=c(0, 1, 2))
> h
$A
[1] 1 2 3

$B
[1] 2 3 4

$C
[1] 0 1 2 
Run Code Online (Sandbox Code Playgroud)

期望的输出:

> MagicFunction(h, element >= 3)
$A
[1] 3

$B
[1] 3 4
Run Code Online (Sandbox Code Playgroud)

Sot*_*tos 5

你可以试试,

Filter(length, lapply(h, function(i)i[i>=3]))

#$A
#[1] 3

#$B
#[1] 3 4
Run Code Online (Sandbox Code Playgroud)

如果你有NA的元素,那么你可以na.omit用来删除那些.ie

h = list(A=c(1, 2, 3), B=c(2, 3, 4), C=c(0, 1, 2), D=NA)
Filter(length, lapply(h, function(i)na.omit(i[i>=3])))

#$A
#[1] 3

#$B
#[1] 3 4
Run Code Online (Sandbox Code Playgroud)

另一种选择是,

h = list(A=c(1, 2, 3), B=c(2, 3, 4), C=c(0, 1, 2), D=c(NA, 7))
Filter(length, lapply(h, function(i)(i[i >= 3 & !is.na(i)])))

#$A
#[1] 3

#$B
#[1] 3 4

#$D
#[1] 7
Run Code Online (Sandbox Code Playgroud)