使用If Then Statements从列表中提取名称

时间:2017-09-30 05:46:38

标签: r list

鉴于下面的列表,我想提取每个子列表的名称,其值大于3。

a <- c(1, 2, 3) 
b <- c(4, 5, 6) 
c <- c(7, 8, 9) 
list.x <- list(a,b,c)
names(list.x) <- c('Foo', 'Foobar', 'Foobarred')

预期输出

[1] "Foobar" "Foobarred"

我玩弄了lapply,但我无法理解如何遍历值并返回子列表名称,而不是值。

1 个答案:

答案 0 :(得分:4)

我是按步骤做的 第一步,简单使用sapply“一个用户友好的版本和lapply的包装器默认返回一个向量,矩阵”,如果是simplify = TRUE,则为默认值。

sapply(list.x, function(x) any(x > 3))
#      Foo    Foobar Foobarred 
#    FALSE      TRUE      TRUE 

第二步。由于它还会返回names,因此我尝试查看which是否会保留它们。

which(sapply(list.x, function(x) any(x > 3)))
#   Foobar Foobarred 
#        2         3 

确实如此,所以第三步,将names包裹起来。

names(which(sapply(list.x, function(x) any(x > 3))))
#[1] "Foobar"    "Foobarred"