鉴于下面的列表,我想提取每个子列表的名称,其值大于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,但我无法理解如何遍历值并返回子列表名称,而不是值。
答案 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"