2016-12-05 65 views
0

假设R中我们下面列出的名单,被称为A在R中,如何根据子列表元素的值选择列表中的元素?

A <- list(); 
for (i in c(1:1000)) { 
    A[[i]] <- list(sample(LETTERS, 1, T), runif(1, 1, 1000)) 
} 

使得对iA每个元素,A[[i]][[1]]将是随机分配的信A[[i]][[2]]将是随机分配的数量1至1000.

既然如此,有没有一种方法,最好是没有循环来识别A的哪个元素j包含第二个元素大于500的列表?即这样A[[j]][[2]] > 500

如果我们使用数据帧,我们可以使用函数which。但我不明白如何通过列表清单来实现这一目标。

+0

如果你正在为列表子集创建索引,你可以直接过滤:'Filter(function(x){x [[2]]> 500},A)' – alistaire

回答

1

我们可以使用sapply返回逻辑vector

i1 <- sapply(A, function(x) x[[2]]>500) 

或者没有匿名函数调用

i2 <- sapply(A, `[[`, 2)> 500 

identical(i1, i2) 
#[1] TRUE 

该指数可以用来过滤 'A'

A[i1] 
0

这也可以工作(生成逻辑向量):

unlist(A, recursive = FALSE)[seq(2,2*length(A),2)] > 500